2017-09-19 68 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)