Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:Tkinter文本小部件,新窗口按钮_Python_Tkinter_Python Multithreading - Fatal编程技术网

Python:Tkinter文本小部件,新窗口按钮

Python:Tkinter文本小部件,新窗口按钮,python,tkinter,python-multithreading,Python,Tkinter,Python Multithreading,我正在制作一个基于tkinter的文本小部件,并试图在其中实现一个新的窗口功能。但是每次我点击NewWindow按钮时,我都会在IDLE:RuntimeError:callingtcl中得到这个错误 这是我的密码: #!/usr/bin/env python from Tkinter import * from tkSimpleDialog import askstring from tkFileDialog import asksaveasfilename from tkFileDialo

我正在制作一个基于tkinter的文本小部件,并试图在其中实现一个新的窗口功能。但是每次我点击NewWindow按钮时,我都会在IDLE:RuntimeError:callingtcl中得到这个错误

这是我的密码:

#!/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()
问题的根源是什么?我怎样才能解决它

源代码:


谢谢。

您不能以这种方式混合使用Tkinter和线程。Tkinter不是线程安全的。此外,tkinter的设计使您应该只运行一个
Tk
实例

如果需要多个窗口,则不需要线程,也不需要多个
Tk
实例。像往常一样创建根窗口,并为其他窗口创建一个
Toplevel
的实例