2017-09-19 154 views
0

私はkivyを初めて使用しています。私はkivyを使ってPythonでアプリケーションを作成しようとしています。変更されたときはいつでもtextinputからテキストを読み込む必要があります。機能 - 私はすべてのドキュメントを通過しましたが、それを行う方法を理解できませんでした - どのように私はこれを解決するか、何か不足していることを私に教えてくれますか?あなたがテキストを変更したときに関数を呼び出すためにon_textを使用することができテキストボックスでテキストが変更されたときに、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

のStackOverflowへようこそ!あなたの事例ができるだけ小さいなら、あなたを助けるほうがずっと簡単です。コードを最小限の例に縮小できますか? – PalimPalim

答えて

3

KVファイル

TextInput: 
    on_text: print(self.text) 

。私は時々変更が発生していないときにトリガーさえすると思います。

+0

ありがとう@PalimPalim、あなたの答えとあなたの質問の1つは私がこの問題を解決するのを助けました、私は私の問題を解決するために参考にこれを使用しましたhttps://stackoverflow.com/questions/44630915/kivy-reference-text-of-textinput- by-stringproperty –

2

のTextInputはtext性を有し、kivyに、すべてのpropertiesは、あなたがそれらに反応するように結合することができ、それが明示的に彼らのためmentionnedていない場合でも、ドキュメントを読んだとき、毎回あなたが何かを見ること、on_xxxイベントが関連付けられていますProperty(または、StringProperty NumericProperty , 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) 
関連する問題