2017-03-10 13 views
0

スレッドからプログラムを終了するには?サーバーに接続できず、ユーザーがキャンセルをクリックした場合、プログラム全体を終了したい。Pythonの他のスレッドからメインスレッドを終了

class Client(tk.Frame): 
    def __init__(self, master=None): 
     super().__init__(master) 

     t = threading.Thread(target = self.connect) 
     t.setDaemon(True) 
     t.start() 

     def connect(self): 
       try: 
        r.connect("localhost", 28015) 
        self.refresh_objects() 
       except r.ReqlDriverError as e: 
        self.db_exception_handler() 

     def db_exception_handler(self): 
       if(tk.messagebox.askretrycancel('ERROR','ERROR: Unable to connect to the database.')): 
        try: 
         r.connect("localhost", 28015) 
        except r.ReqlDriverError as e: 
         self.db_exception_handler() 
       else: 
        root.destroy() #I want to terminate here the program 
        #I tried: threading.main_thread().destroy() but not working 

def main(): 
    root = tk.Tk() 
    root.title("IOT_LPS_Client") 
    cln = Client(master=root) 
    cln.mainloop() 
    try: 
     root.destroy() 
    except: 
     pass 

if __name__ == '__main__': 
    main() 

答えて

1

私は強く、スレッドを終了する必要がある、とsys.exitを呼び出してメインスレッドのメインスレッドに通知し、前記統制のとれたシャットダウンをコーディング示唆しています。 [メインスレッドsys.exitでのみプロセスが終了することに注意してください。

This blog postでは、この問題のいくつかとその解決方法について説明しています。簡単に言えば、threading.Event()のようなものを使って、どのスレッドからもメインスレッドへの停止信号を伝えることができます。

関連する問題