在Kivy中输入文本后如何调用函数

2024-09-24 06:23:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我的文本输入框中输入字符后调用函数。我试过绑定,但是不管输入什么,它都会调用它。我从一个手持式扫描仪获取输入并显示在文本输入框中。然后我最终会把它包括其他信息发送到一个csv文件中。在

主2.py

import kivy
import subprocess
import csv
import datetime
kivy.require('1.9.0')


from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivy.uix.textinput import TextInput
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.label import Label
from kivy.properties import StringProperty
from kivy.lang import Builder
from kivy.core.window import Window





dt = datetime.date.today()
pafa = ''


#presentation = Builder.load_file('utest.kv')

class Barcode(TextInput):
    multiline = False

class PassFail(Label, Widget):
    pass

class UsbApp(App):



    def build(self):

        b= BoxLayout(orientation='vertical')
        t= Barcode(font_size = 50,

                    text="",

                    height=200,

                    background_color = (1,1,1,1)
                    )


        l=Label(text="Hey!",
                font_size=150
                )
        pf = PassFail(text='Pass/Fail',
                    font_size= 50,

                    background_color= (1,0,0,1),
                    color = (1,0,0,1),
                    bold=True
                    )

        t.bind(text = l.setter('text'))

        prompt=Label(text='Plug in device')

        b.add_widget(prompt)        
        b.add_widget(t)
        b.add_widget(pf)


        t.bind(text=Clock.schedule_once(self.run_test, 2))
        return b

    def detect(self):
        #detect when device is plugged in
        pass
        #device is detected change label

    #def on_text(self, barcode, clock):

        #self.barcode = Barcode().text

        #Clock.schedule_once(self.run_test, 2)

    def change_label(self):
        if self.prompt.text is 'Plug in device':
            self.prompt.text = 'Device detected'
        elif self.prompt.text == 'Device detected':
            self.prompt.text = 'Scan device'
        elif self.prompt.text == 'Scan device':
            self.prompt.text = 'Plug in device'

    def run_test(self, proc):

        #subprocess call to run app
        looptest = subprocess.call('sudo ./h2hlooptest -v', shell=True)

        #catch exit code then change label to Pass or fail
        if looptest == 0:
            pf = PassFail().text = 'Pass'

        else:
            pafa = PassFail().text = 'Fail'

        self.csv_write(pafa)

    def csv_write(self, pafa):

        with open("results.csv", "a") as csv_file:

            writer = csv.writer(csv_file, delimiter=',')
            csvlist=[[dt, Barcode().text, pafa]]
            writer.writerows(csvlist)

if __name__=="__main__":
    UsbApp().run()

Tags: csvruntextfromimportselfdevicedef
1条回答
网友
1楼 · 发布于 2024-09-24 06:23:15
t.bind(text=Clock.schedule_once(self.run_test, 2))

这并没有将调度函数绑定到text属性,而是调用了schedule_once函数。在

您需要将函数传递给bind方法。在这种情况下,可以使用lambda函数:

^{pr2}$

相关问题 更多 >