在用Kivy做一个简单的安卓计算app时遇到以下几个问题
1、中文无法显示:用网上的方法即下载一个汉字如下图导入到kv文件中虽然在pycharm时可以正常显示。但用Kivy buildozer 打包成apk后就出错。
2、因为我做的app里的页面很长,无法用手滑动查看未展示在页面上的东西(不知道怎么开启上下滑动手势)
3、无法在py里设置具体产品id为boxlayout4的BoxLayout的宽与屏幕宽相同
4、根据Kivy官网上的信息,照葫芦画瓢可以设置label的背景颜色,但这个取名字必须前面加B,如果换成其他字母背景色显示就会失效,不明白为什么
import re
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
# 设置textinput输入信息只能是浮点型
class FloatInput(TextInput):
def __init__(self,**kwargs):
super(FloatInput,self).__init__(**kwargs)
size_hint= [0.2, 0.5]
font_size= 30
pat = re.compile('[^0-9]')
def insert_text(self, substring, from_undo=False):
pat = self.pat
if '.' in self.text:
s = re.sub(pat, '', substring)
else:
s = '.'.join([re.sub(pat, '', s) for s in substring.split('.', 1)])
return super(FloatInput, self).insert_text(s, from_undo=from_undo)
# 设置标题栏label基本参数
class Name_Label(Label):
def __init__(self,**kwargs):
super(Name_Label,self).__init__(**kwargs)
class Float(Widget):
def __init__(self,**kwargs):
super(Float, self).__init__(**kwargs)
self.ids.boxlayout4.size_hint = [None,None]
# 这里设置宽度为屏幕宽无法实现?????????????????????
self.ids.boxlayout4.size = [self.width,2000]
# 设置了50行的boxlayout,无法用手滑动查看???
for row in range(50):
self.boxlayout = BoxLayout()
self.ids.boxlayout4.add_widget(self.boxlayout)
label1 = Name_Label(text=str(row),size_hint=[0.05,1])
label1 = Name_Label(text='1',size_hint=[0.1,1])
label2 = Name_Label(text='11',size_hint=[0.4,1])
label3 = Name_Label(text='111',size_hint=[0.1,1])
label4 = Name_Label(text='1111',size_hint=[0.2,1])
label5 = Name_Label(text='11111',size_hint=[0.15,1])
self.boxlayout.add_widget(label1)
self.boxlayout.add_widget(label2)
self.boxlayout.add_widget(label3)
self.boxlayout.add_widget(label4)
self.boxlayout.add_widget(label5)
class ProductPriceApp(App):
def build(self):
return Float()
if __name__ == '__main__':
ProductPriceApp().run()
# 存在问题1、做成app无法显示中文 2、无法查看未展示的产品行 3、无法在py里设置具体产品BoxLayout的宽与屏幕宽相同4、label的背景颜色这个取名字必须前面加B,如果换成其他字母背景色显示就会失效
<BackgroundColor@Widget>
background_color: 1, 1, 1, 1
canvas.before:
Color:
rgba: root.background_color
Rectangle:
size: self.size
pos: self.pos
# 这个取名字必须前面加B,如果换成其他字母背景色显示就会失效,请问是什么原因?
<BName_Label@Label+BackgroundColor>
background_color: 0, 0, 0, 0
font_size:30
<FloatInput>:
font_size:18
# 这里加载的msyh.ttc字体在pycharm中可以正常显示,但用 buildozer打包成apk后在手机里会闪退?
<Name_Label>
font_size:25
font_name:'./msyh.ttc'
<Label>
font_size:15
font_name:'./msyh.ttc'
<Float>:
# 原料参数
BoxLayout:
id:boxlayout1
x:0
top:root.height
size:root.width,120
orientation:'vertical'
BoxLayout:
BName_Label:
text:'参数1'
font_size:30
background_color: 1, 0, 0, 0.5
BName_Label:
text:'参数2'
font_size:30
background_color: 1, 0, 0, 0.5
BName_Label:
text:'参数3'
font_size:30
background_color: 1, 0, 0, 0.5
BName_Label:
text:'参数4'
font_size:30
background_color: 1, 0, 0, 0.5
BName_Label:
text:'参数5'
font_size:30
background_color: 1, 0, 0, 0.5
BoxLayout:
FloatInput:
id:textinput1
FloatInput:
id:textinput2
FloatInput:
id:textinput3
FloatInput:
id:textinput4
FloatInput:
id:textinput5
BoxLayout:
Name_Label:
text:'参数6'
Name_Label:
text:'参数7'
Name_Label:
text:'参数8'
Name_Label:
text:'参数9'
Name_Label:
text:'参数10'
BoxLayout:
FloatInput:
id:textinput6
FloatInput:
id:textinput7
FloatInput:
id:textinput8
FloatInput:
id:textinput9
FloatInput:
id:textinput10
# 产品计算按钮
BoxLayout:
id:boxlayout2
x:0
top:root.height - boxlayout1.height
size:root.width,30
Button:
id:button1
text:'计算'
# 产品名称标签
BoxLayout:
id:boxlayout3
x:0
top:root.height - boxlayout1.height - boxlayout2.height
size:root.width,30
Label:
text:'序号'
size_hint:[0.05,1]
Label:
text:'品牌'
size_hint:[0.1,1]
Label:
text:'名称'
size_hint:[0.4,1]
Label:
text:'规格'
size_hint:[0.1,1]
Label:
text:'尺寸'
size_hint:[0.2,1]
Label:
text:'参考值'
size_hint:[0.15,1]
# 具体产品
BoxLayout:
id:boxlayout4
x:0
top:root.height - boxlayout1.height - boxlayout2.height -boxlayout3.height
orientation : 'vertical'
5、如果程序中有多个py文件,在Kivy buildozer中怎么打包?
做个手机app可以索取特定excel表格中的数据,怎么用Kivy buildozer打包?
kivy坑太多了,放弃吧,