2017-09-19 67 views
0

我是新来kivy,我试图用Python语言编写使用kivy的应用程序,我在一个地步,我必须从阅读文本的TextInput发生变化时随时和基于我要实现我的按钮的得到来袭功能 - 我已经通过所有的文件,但我不知道如何去做 - 任何机构可以告诉我,我该如何解决这个问题,或者我错过了什么?当在文本框中改变文本时,从Textinput动态读取文本?

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: 

<[email protected]>: 
    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() 
+0

欢迎计算器!如果你的例子尽可能小,那么帮助你很容易。你能缩小你的代码到一个最小的例子吗? – PalimPalim

回答

3

千伏文件

TextInput: 
    on_text: print(self.text) 

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

+0

感谢@PalimPalim,你的回答和你的一个问题帮助我解决了这个问题,我用这个作为参考来解决我的问题https://stackoverflow.com/questions/44630915/kivy-reference-text-of-textinput-副stringproperty –

2

TextInput获得了一个text财产,并在kivy,所有properties有相关on_xxx事件,可以绑定到对他们的反应,所以阅读文档时,即使它没有明确mentionned对他们来说,每次你看到的东西被定义为Property(或它的任何亚类中,像StringProperty NumericProperty , OBJECTPROPERTY , AliasProperty`)。

TextInput: 
    on_text: do_something(self.text) 

或蟒蛇

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

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