2017-04-27 15 views
0

私のアプリケーションのスレッドには何かが追加されていて、それを他の画面で印刷したいのですが、プログラムは印刷後にスレッドを実行してくれます私のリストには何もないというエラーです。私はスレッドが完了するまで、プログラムを停止する必要があります、どのように私はこれを行うことができますか?助けのためのおかげで kivy-スレッドが終了するまで待つ必要があります

私のアプリ

...私は().join使用しようとしたが、それはdidntの仕事です:私は、行を削除していた場合

class LoginScreen(GridLayout): 
    def __init__(self, **kwargs): 
     super(LoginScreen, self).__init__(**kwargs) 
     self.cols = 2 


     self.add_widget(Label(text='username')) 
     self.username = TextInput(multiline=False) 
     self.add_widget(self.username) 

     self.add_widget(Label(text='Password')) 
     self.password = TextInput(multiline=False, password=True) 
     self.add_widget(self.password) 

     self.submit_button = Button(text='sumbit',size_hint=(.5, 
.25),font_size=20) 
     self.submit_button.bind(on_press=self.submit_username) 
     self.add_widget(self.submit_button) 

    def submit_username(self, *args): 

     self.msg=threading.Thread(target=send_data(self.username.text)) 
     self.msg.start() 
     self.msg.join() 
     sm.current = 'searchi' 
     sm.transition.direction = 'left' 

def send_data(name): 
    my_socket = socket.socket() 
    my_socket.connect(('127.0.0.1', 8093)) 
    my_socket.send(name.encode('utf-8')) 
    name,address = my_socket.recvfrom(1024) 
    msg = name.decode('utf-8') 
    alist.append(msg) 
    my_socket.close() 

# Declare both screens 

class Searchi(Screen): 
    def __init__(self, **kwargs): 
     super(Searchi, self).__init__(**kwargs) 
     self.add_widget(Label(text=alist[0])) 

リストが「MSG」を持っている」self.add_widget (Label(text = alist [0])) "recv行に問題はありません。スレッドが終了するまで待つだけです。

+0

私が投稿した回答はあなたに役立ったのですか? – Tshirtman

答えて

0

とにかくそれを待つつもりなら、スレッドを気にするのはなぜですか?あなたはsend_data(self.username.text)を呼び出すだけで済みます。

これは通常、悪い習慣(スレッドなしで呼び出しをブロックするか、またはブロックする方法でスレッドが終了するのを待っています。これは同等です)、前にタスクが完了するのを待つ代わりに続行すると、実行されているタスク、つまりスレッドの最後に反応して、アプリの進行を可能にするものを実行します。

スレッドの最後に呼び出された新しい画面にユーザーを移動させるコールバックがある可能性があります。あなたは、アクションが発生している間、ユーザーは何も触れないようにしたい場合は

def submit_username(self, *args): 
    def callback(): 
     sm.current = 'searchi' 
     sm.transition.direction = 'left' 
    threading.Thread(target=send_data(self.username.text, callback).start() 

def send_data(name, callback): 
    my_socket = socket.socket() 
    my_socket.connect(('127.0.0.1', 8093)) 
    my_socket.send(name.encode('utf-8')) 
    name,address = my_socket.recvfrom(1024) 
    msg = name.decode('utf-8') 
    alist.append(msg) 
    my_socket.close() 
    callback() 

することは、私はauto_dismiss = Falseに、データが処理されている、とコールバックにそれを閉鎖することを示す内容でポップアップを入れて助言します。

関連する問題