TextInput中的文本未更新

时间:2015-09-18 16:01:47

标签: python kivy

我正在尝试使用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更改。

2 个答案:

答案 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