2017-03-26 24 views
0

私は現在、3Dプリンタ用のGUIを開発していますが、スレッド機能を停止する方法の問題があります。私は、シリアルポートを介してGコードの文字列を送信するスレッド機能を停止する私のGUI内の別の機能を持つボタンをクリックできるようにしたい。現在、この機能には、印刷中に他の機能を起動できるようにスレッドが組み込まれています。私はこの停止機能をどのように組み込むのかについていくつかのアドバイスをいただければ幸いです。Python Tkinter、スレッド機能を停止する

以下は、Gコードファイルを開き、各行をシリアルポート経由で送信する機能です。

def printFile(): 
def callback(): 
    f = open(entryBox2.get(), 'r'); 
    for line in f: 
     l = line.strip('\r') 
     ser.write("<" + l + ">") 
     while True: 
      response = ser.read() 
      if (response == 'a'): 
       break 
t = threading.Thread(target=callback) 
t.start() 

答えて

0

スレッドを停止することはできません。スレッドを停止する必要があります。だから、スレッドに信号を送る必要があります。これは通常Eventで行われます。今、あなたはあなたのコード内の別の場所でイベントを設定した場合

stop_event = threading.Event() 
def callback(): 
    f = open(entryBox2.get(), 'r'); 
    for line in f: 
     l = line.strip('\r') 
     ser.write("<" + l + ">") 
     while True: 
      response = ser.read() 
      if (response == 'a'): 
       break 
      if stop_event.is_set(): 
       break 
t = threading.Thread(target=callback) 
t.start() 

:スレッドは、以下のことを気づくループを切断して死んでしまう

stop_event.set() 

0

グローバル変数をスレッドの停止条件として使用します。

def stop_callback(event): 
    global send_gcode 
    send_gcode = False 
send_gcodeがボタンの例えばコールバック( Falseに設定されるまで

send_gcode = True 

def printFile(): 
    def print_thread(): 
     f = open(entryBox2.get(), 'r'); 
     for line in f: 
      if not send_gcode: 
       break 
      l = line.strip('\r') 
      ser.write("<" + l + ">") 
      while True: 
       response = ser.read() 
       if (response == 'a'): 
        break 
    t = threading.Thread(target=print_thread) 
    send_gcode = True 
    t.start() 

スレッドが実行され

関連する問題