【问题标题】:Read the text from Textinput dynamically when text changed in text box?当文本框中的文本发生更改时,动态地从 Textinput 读取文本?
【发布时间】:2017-09-20 21:33:15
【问题描述】:

我是 kivy 的新手,我正在尝试在 python 中使用 kivy 编写一个应用程序,我有一次感到震惊,每当文本输入发生更改时我都必须从文本输入中读取文本,并且基于此我想实现我的按钮的功能 - 我已经阅读了所有文档,但我不知道该怎么做 - 任何人都可以告诉我如何解决这个问题或者我错过了什么吗?

from __future__ import print_function
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.core.image import Image
from kivy.uix.floatlayout import FloatLayout
from kivy.graphics import *
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.popup import Popup
from kivy.properties import ObjectProperty
import walascan
from kivy.clock import Clock
import os


kv = """
<KartScan>:
    IntroScreen:

<IntroScreen@Screen>:
    orientation: 'horizontal'
    name: 'introscreen'
    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: 'index.png'
    AnchorLayout:
        anchor_x: 'center'
        anchor_y: 'center'
        BoxLayout:
            orientation:'horizontal'
            size_hint: .5, .1
            canvas:
                Color:
                    rgb: 1, 1, 1
                Rectangle:
                    pos: self.pos
                    size: self.size
            spacing: 20
            pos_hint: {'center_x':.8, 'center_y': .8}
            AnchorLayout:
                anchor_x: 'left'
                size_hint_x: .5
                TextInput:
                    id: waybill
                    width: 20
                    text: "Enter Waybill No."
                    multiline: False
                    height: self.minimum_height
                    size_hint_y: None
                    font_size: 30
                    focus: True
                    on_text_validate: app.on_waybill()
            AnchorLayout:
                anchor_x: 'right'
                size_hint_x: None
                Button:
                    size_hint: None, None
                    height: 50
                    width: self.texture_size[0]
                    padding: 10, 10
                    text: "Add"
                    on_press:app.buttonClicked()
                    on_release: root.current = 'mainpage'
            AnchorLayout:
                anchor_x: 'right'
                size_hint_x: None
                Button:
                    size_hint: None, None
                    height: 50
                    width: self.texture_size[0]
                    padding: 10, 10
                    text: "Compare"
                    on_press:app.buttonClicked()
                    on_release: root.current = 'mainpage'
"""

Builder.load_string(kv)

waybill = TextInput(text="Enter Waybill No.", multiline=False)



class KartScan(FloatLayout):
    def __init__(self, **kwargs):
        super(KartScan, self).__init__(**kwargs)
        self.register_event_type('on_text_validate')

    def on_text(self, *args):
        print('new value is ', waybill.text)

    def on_text_validate(self):
        pass

    def on_focus(self, obj, focused):
        if not focused:
            self.dispatch('on_text_validate')


class KartScanApp(App):

    def build(self):
        return KartScan()

    def buttonClicked(self):
        popup = Popup(title='Result',
                      content=Label(text=self.on_waybill()),
                      size_hint=(None, None), size=(100, 100))
        popup.bind()
        popup.open()

    def getwlbtstate(self):
        return walascan.mainAntennas()

    def on_waybill(self):
        waybill.bind(text=KartScan.on_text_validate)
        # popup = Popup(title='Result',
        #               content=Label(text=waybill.text),
        #               size_hint=(None, None), size=(100, 100))
        # popup.bind()
        # popup.open()
        return waybill.text

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

【问题讨论】:

  • 欢迎来到stackoverflow!如果您的示例尽可能小,那么帮助您会容易得多。你能把你的代码缩小到最小的例子吗?

标签: python kivy kivy-language


【解决方案1】:

kv文件

TextInput:
    on_text: print(self.text)

您可以使用on_text 在文本更改时调用函数。我认为它有时甚至会在没有发生变化时触发。

【讨论】:

【解决方案2】:

TextInput 有一个 text 属性,并且在 kivy 中,所有 properties 都关联了 on_xxx 事件,您可以绑定到这些事件以对它们做出反应,因此在阅读文档时,即使没有明确提及它们,每次你看到的东西都被定义为Property(或者它的任何子类,比如StringPropertyNumericProperty,ObjectProperty,AliasProperty`)。

TextInput:
    on_text: do_something(self.text)

或者在python中

t = TextInput(text='', on_text=do_something)

t = TextInput(text='')
t.bind(on_text=do_something)

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    相关资源
    最近更新 更多