gpt4 book ai didi

python - kivy,如何通过文本更改触发事件

转载 作者:太空狗 更新时间:2023-10-30 02:54:01 24 4
gpt4 key购买 nike

一些 GUI 工具箱包含诸如 on_change 之类的事件,每次文本框中的文本更改时都会触发这些事件。

据此: https://kivy.org/docs/api-kivy.uix.textinput.html on_text 事件应该相等。因此,我创建了一个 TextInput 框,期望每次更改一个字母时,框的内容将显示在终端中。这是代码:

from kivy.app import App
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout

class LoginScreen(BoxLayout):

def __init__(self, **kwargs):
super(LoginScreen, self).__init__(**kwargs)
self.orientation = 'horizontal'
self.mytext = TextInput(text='500', multiline = False)
self.add_widget(self.mytext)

self.mytext.bind(on_text = self.calc)
#self.mytext.bind(on_text_validate = self.calc)

def calc(self, mytext):
print mytext.text

class MyApp(App):

def build(self):
return LoginScreen()

if __name__ == '__main__':
MyApp().run()

然而,什么也没有发生,这显然意味着 calc 函数根本没有被触发。请注意 on_text_validate 事件工作正常,因为当我按 Enter 时,框的内容会打印在终端中。

那么,我是否误解了 on_text 事件,如果是,我该如何实现我的目标?

最佳答案

on_text不是 TextInput 事件。要在文本更改时运行回调,您可以绑定(bind) text属性(存储 textinput 的文本):

from kivy.app import App
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout

class LoginScreen(BoxLayout):

def __init__(self, **kwargs):
super(LoginScreen, self).__init__(**kwargs)
self.orientation = 'horizontal'
self.mytext = TextInput(text='500', multiline = False)
self.add_widget(self.mytext)
self.mytext.bind(text = self.calc)

def calc(self, instance, text):
print(text)

class MyApp(App):

def build(self):
return LoginScreen()

if __name__ == '__main__':
MyApp().run()

您可以使用 on_<property_name> 创建在属性更改时自动调用的回调语法:

  • Kivy Languaje:

    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.lang import Builder

    Builder.load_string('''\
    <LoginScreen>:
    orientation: "horizontal"
    TextInput:
    text: "500"
    on_text: root.calc(self.text)
    ''')

    class LoginScreen(BoxLayout):
    def __init__(self, **kwargs):
    super(LoginScreen, self).__init__(**kwargs)

    def calc(self, text):
    print(text)

    class MyApp(App):

    def build(self):
    return LoginScreen()

    if __name__ == '__main__':
    MyApp().run()
  • 扩展小部件类:

    from kivy.app import App
    from kivy.uix.textinput import TextInput
    from kivy.uix.boxlayout import BoxLayout

    class My_TextInput(TextInput):
    def __init__(self, **kwargs):
    super(My_TextInput, self).__init__(**kwargs)

    def on_text(self, instance, text):
    print(text)

    class LoginScreen(BoxLayout):
    def __init__(self, **kwargs):
    super(LoginScreen, self).__init__(**kwargs)
    self.mytext = My_TextInput(text='500', multiline = False)
    self.add_widget(self.mytext)


    class MyApp(App):

    def build(self):
    return LoginScreen()

关于python - kivy,如何通过文本更改触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47581333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com