2017-10-30 18 views
0

Python3.5では以下のコードは動作しません(RuntimeError:別のアパートメントからTclを呼び出す) Python 2.7上でうまく動作します 難しいです問題の原因を知っていると私はそれを修正することができます。Python 3でのtkinterエラー(RuntimeError:別のAppartmentからのTclの呼び出し)

import tkinter 
import threading 

class MyTkApp(threading.Thread): 
    def __init__(self): 
     self.root=tkinter.Tk() 
     self.s = tkinter.StringVar() 
     self.s.set('Foo') 
     l = tkinter.Label(self.root,textvariable=self.s) 
     l.pack() 
     threading.Thread.__init__(self) 

    def run(self): 
     self.root.mainloop() 


app = MyTkApp() 
app.start() 

答えて

3

あなた必見シングルスレッドからのみアクセスTkinterの、特にメインスレッド(あなたが本当に本当に非常に勇敢でない限り)。他のすべてのスレッドは、GUIの更新が必要なときにメインスレッドにメッセージを送信する必要があります。スレッド間でメッセージを送信するためのメカニズムがたくさんあります。

スレッディングルールは、基本的なライブラリがスレッド固有のデータを大量に使用しているため(グローバルインタープリタロックのようなものを必要としないため)、そうした方法です。あなたは本当に別のスレッドからGUIを更新することはできません。あなたがそうしようとすると、システムは間違いなく爆発するでしょう。

関連する問題