我正在尝试使用kv语言来重做我已经完成的程序。第一个是在python中完成的。现在,当我使用kivy语言时,我的UI无法获得任何内容。在这个例子中。当条形码文本发生变化时,它应该更新它的text属性,然后应该触发我的函数。问题是它无法识别文本输入框中的更改。
main6.py
class Barcode(TextInput):
l_prompt= ObjectProperty()
btext = StringProperty()
# capture barcode
def onText(self):
print ('in onText')
c=True
while c:
print('in loop')
time.sleep(1/10)
print(self.text)
if len(self.text) <=5:
c= True
else:
c = False
print('in else')
self.l_prompt.change_label('test')
Clock.schedule_once(self.parent.run_test,1)
class MainLayout(FloatLayout):
dt = str(datetime.today())
pafa = '' #pass/fail
barcode = '' #barcode number
counter = 0 #item counter
prompt_wid = ObjectProperty()
barcode_wid = ObjectProperty(rebind = True)
passfail_wid = ObjectProperty()
counterlabel_wid = ObjectProperty()
def __init__(self, **kwargs):
super(MainLayout, self).__init__(**kwargs)
#start test
#self.starttest(self)
self.l=Label()
#self.barcode_wid.bind(text=self.l.setter('text'))
def detect(self, d):
#detect when device is plugged in
t = True
while t:
time.sleep(1)
dev = usb.core.find(idVendor= 0x2996)
if dev is None:
t=False
self.prompt_wid.change_label('scan') #label change
#self.barcode_wid.focus=True #brings cursor up for input scan
j = threading.Thread(target=self.barcode_wid.onText)
j.daemon = True
j.start()
ex6.kv
#: kivy 1.9
<MainLayout>:
orientation: 'vertical'
size: root.size
prompt_wid: prompt
barcode_wid: barcode
passfail_wid: passfail
counterlabel_wid: counterlabel
canvas.before:
Color:
rgb: 0, 0, .6
Rectangle:
pos: self.pos
size: self.size
Prompt:
id: prompt
canvas.before:
Color:
rgb: .6, .6, .6
Rectangle:
pos: self.pos
size: self.size
Barcode:
id: barcode
l_prompt: prompt
focus: 'True'
text:'hey'
<Barcode>:
pos_hint: {'center_x': .5, 'top': 0.666 }
size_hint:(1,.3)
font_size: self.height/3
text: ''
multiline: 'False'
padding: 0,(self.height/3)
presentation = Builder.load_file('ex6.kv')
class MainApp(App):
def build(self):
ml = MainLayout()
Clock.schedule_interval(ml.detect, 2)
return MainLayout()
if __name__=="__main__":
MainApp().run()
我正在尝试使用Kivy属性,但我认为我缺少py和kv文件之间的基本链接,因为我的标签(l_prompt)也没有更新。除了在文本输入框中输入字符外,一切都在场景后面运行,但没有UI更改。
答案 0 :(得分:1)
您的程序在任何时候都不会调用onText
函数。您的意思是将它命名为on_text
,当text
属性发生变化时会自动调用它吗?
答案 1 :(得分:0)
我发现我必须从我的应用程序的init方法开始我的测试。所以我在构建部分中注释掉了代码,并在我的init方法中取消注释了代码&#34; self.starttest&#34;。我改变了它认为从构建方法调用看起来更好但我认为发生了什么是因为它跳过了init我基本上断开了UI的功能。
g=7,h=8,i=9,j=10,k=11,l=12
)