2016-06-28 5 views
1

私はKivyの初心者です。私はPythonアプリケーション用のGUIを作成しようとしています。 私はバックエンドをPythonでプログラミングしています。単独で(キーボードを入力として)作業していましたが、今はkivyでフロントエンドが必要です。 - 両方のコンポーネント(バックエンドとフロントエンド)を同時に実行するにはどうすればよいですか? - フロントエンド(kivy)に情報を表示するために、バックエンドで既存のクラスのオブジェクトを共有するにはどうすればよいですか?私は、インスタンスログインウィンドウの要素を更新するにはどうすればよいインスタンスクラス(バックエンド)とKivyグラフィカル要素(フロントエンド)間でデータを共有する方法はありますか?

classtest.py

class Test(object): 
    def __init__(self, attr): 
    self.attr = attr 

gui.py

class LoginScreen(GridLayout): 
    def __init__(self, **kwargs): 
    super(LoginScreen, self).__init__(**kwargs) 
    self.cols = 2 
    self.add_widget(Label(text='User Name')) 
    self.username = TextInput(multiline=False) 
    self.add_widget(self.username) 
    self.add_widget(Label(text='password')) 
    self.password = TextInput(password=True, multiline=False) 
    self.add_widget(self.password) 
    print self.username.text 

class Login(App): 

    def build(self): 
    Window.borderless = True 
    return LoginScreen()  

main.py例で

import classtest, gui 
users = ['user_name1', 'user_name2', 'user_name3']  
gui.Login().run() 
for u in users: 
    test = classtest.Test(u) # this should update the user text field on the windows login automatically, but how? 

、属性値の変更?

ありがとうございました!

答えて

0

それが原因で...ループで更新されません。

for u in users: 
    test = classtest.Test(u) 

はそのループの後 に書かれている:各App().run()または類似のためのP Kivyはコマンドループを起動して、「実行します」。基本的には、あなたのアプリが動いている間は実行されません。そのforループにprint('something')を入れると表示されます。

  • gui.pyファイルまたは
  • に右classtest.py
  • にそれらのものを設定することを記述します。

    例:あなたのためにあなたがいずれかの必要があることを意味し

    while True: 
        <do something> 
    <change a variable in that loop> # == nope 
    

第2オプションは、あなたがクラスを使用するときにに依存します。メインループの外側にいる場合は、今の状況と同じです。Test()の内部はgui.pyです。

アプリの実行中にrun()の後にコードを使用することはできません。多分汚れたトリックで、しかしそれはあなたに悩みだけをもたらすでしょう。あなたが書いたコードは、いくつかの "クリーニング"で使用することができます。これはApp.on_stopメソッド(メインループ内)でも実行できます。

関連する問題