2016-11-04 10 views
0

"プログラムの開始"ボタンを押すと、5秒のタスクが開始され、GUIがブロックされます。 私は理解しているように、各ボタンはGUIから独立して動作するように、スレッドを使用する必要があります。 私はすでに1ヶ月近く立ち往生していますが、誰かが私にどのように実行できるかを教えてもらえますか?def start_Button(self):機能はスレッドを使用していますか?ボタンを押したときにTkinter GUIが終了するまで

from tkinter import * 
import time 


class Window(Frame): 
    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.master = master 
     self.init_window() 

    def init_window(self): 
     self.var = IntVar() 
     self.master.title("GUI") 
     self.pack(fill=BOTH, expand=1) 
     quitButton = Button(self, text="Exit", command=self.client_exit) 
     startButton = Button(self, text="Start Program", command=self.start_Button) 

     quitButton.grid(row=0,column=0) 
     startButton.grid(row=0, column=2) 

    def client_exit(self): 
     exit() 

    def start_Button(self): 
     print('Program is starting') 
     for i in range (5): 
      print(i) 
      time.sleep(1) 


root = Tk() 
root.geometry("200x50") 
app = Window(root) 
root.title("My Program") 
root.mainloop() 

答えて

2

あり、あなたがスレッドに飛び込む前に、最初に尋ねるべき重要な質問の多くがありますが、によると、大規模な最も重要な質問は「私は私のスレッド間で通信したいですか?」あなたの最小限の例では、全くの通信は必要ありませんが、実際のコードではstart_Buttonはいくつかの作業を行い、データをGUIに戻しているかもしれません。それが事実なら、もっとやるべきことがあります。そのような場合はコメントとして明記してください。

最小限の例として、実際は非常に簡単です。

class Window(tkinter.Frame): 
    # the rest of your GUI class as written, but change... 

    def start_Button(self): 
     def f(): 
      # this is the actual function to run 
      print('Program is starting') 
      for i in range (5): 
       print(i) 
       time.sleep(1) 
     t = threading.Thread(target=f) 
     t.start() 
+0

私はこのような解決策をすでに試していましたが、スレッドモジュールを適切な場所に配置できませんでした。私はスレッドを使用するのが難しく、干渉するかもしれないことを知っています。これは私のプログラムでは当てはまりません。ありがとう! –

関連する問題