我正在创建一个基于tkinter的文本小部件,我正在尝试在其中实现一个新的窗口函数。但每次我点击新窗口按钮时,我都会在IDLE中收到此错误:RuntimeError:从不同的公寓调用Tcl
这是我的代码:
#!/usr/bin/env python
from Tkinter import *
from tkSimpleDialog import askstring
from tkFileDialog import asksaveasfilename
from tkFileDialog import askopenfilename
from tkMessageBox import askokcancel
import Tkinter as tk
import ttk
import threading
from ScrolledText import ScrolledText
Window = Tk()
Window.title("TekstEDIT")
/..CODE.../
class newWindowThread(threading.Thread):
def __init__(self, choosen=""):
threading.Thread.__init__(self)
self.choosen = choosen
def run(self):
if self.choosen == "":
root = Tk()
newEditor = SimpleEditor(root)
root.mainloop()
else:
root = Tk()
newEditor = SimpleEditor(root, self.choosen)
root.mainloop()
/...CODE.../
wFile = Menu(menubar, tearoff=0,relief="raised")
wFile.add_command(label="New", accelerator="Ctrl+N", command=self.onNew)
wFile.add_command(label="New Window", accelerator="Ctrl+Shift+N", command=self.onNewWindow)
/...CODE.../
def onNewWindow(self):
t=newWindowThread()
t.start()
问题的根源是什么?我该如何解决?
感谢。
答案 0 :(得分:1)
您不能以这种方式混合Tkinter和线程。 Tkinter不是线程安全的。此外,tkinter的设计使您只能运行Tk
的单个实例。
如果您想要多个窗口,则不需要线程,并且您不需要Tk
的多个实例。像往常一样创建根窗口,对于其他窗口创建Toplevel
的实例。