Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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中销毁和重新创建TK窗口_Python_Multithreading_Window_Tk - Fatal编程技术网

在Python中销毁和重新创建TK窗口

在Python中销毁和重新创建TK窗口,python,multithreading,window,tk,Python,Multithreading,Window,Tk,我使用python在线程中创建了一个根窗口。接下来我需要销毁它并创建一个新窗口,但出现了一个错误,说线程只能启动一次。如何启动新窗口窗体 class SignUp(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.mw=Tkinter.Tk() self.mw.geometry("800x600""+290+50") sel

我使用python在线程中创建了一个根窗口。接下来我需要销毁它并创建一个新窗口,但出现了一个错误,说线程只能启动一次。如何启动新窗口窗体

class SignUp(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.mw=Tkinter.Tk()
        self.mw.geometry("800x600""+290+50")
        self.mw.title("Registration Form")
        self.mw.resizable(width=False,height=False)
    self.regs=Tkinter.Button(self.canvas, text= "Log-in",font="{Arial} 12 {bold}",bg='black',fg='white',command=self.login)
    self.regs.place(rely=0.82,relx=0.1,relwidth=0.30)
        self.start()

    def login(self):
        self.mw.destroy()
        self.mw.geometry("650x700""+350+20")
        self.mw.title("Py cos")
        self.mw.resizable(width=False,height=False)
        self.canvas= Tkinter.Canvas(self.mw)
        self.canvas.pack(expand='yes',fil='both')
        self.photo= Tkinter.PhotoImage(file='Image/vote.gif')
        self.canvas.create_image(0,0,image=self.photo,anchor='nw')

def run(self):
    self.client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    self.client.connect(('localhost',500))
    #self.client.connect(('169.254.57.141',500))
    self.rec=self.client.recv(1024)
    self.canvas.create_text(105,595,text=self.rec, font="{Arial} 8 {bold}", fill = 'yellow')


if __name__=="__main__":
    SignUp().mw.mainloop()
这个密码给了我

RuntimeError: threads can only be started once

如何创建窗口、销毁窗口并再次创建它,同时避免此错误?

如果使用线程,可以执行以下操作:-

from tkinter import *
from threading import Thread
class App():
    def __init__(self):
        self.g=Tk()
        self.th=Thread(target=self.g.mainloop)
        self.th.start()
    def destroy(self):
        self.g.destroy()
class App():
    def __init__(self):
        self.g=Tk()
        self.bu=Button(self.g,text='Abort',command=self.Abort)
        self.bu.pack()
        self.g.mainloop()
    def Abort(self):
        self.g.destroy()
如果不使用线程,可以在应用程序中按如下方式放置中止按钮:-

from tkinter import *
from threading import Thread
class App():
    def __init__(self):
        self.g=Tk()
        self.th=Thread(target=self.g.mainloop)
        self.th.start()
    def destroy(self):
        self.g.destroy()
class App():
    def __init__(self):
        self.g=Tk()
        self.bu=Button(self.g,text='Abort',command=self.Abort)
        self.bu.pack()
        self.g.mainloop()
    def Abort(self):
        self.g.destroy()
我认为你的代码应该是这样的:-

class SignUp(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.mw=Tkinter.Tk()
        self.mw.geometry("800x600""+290+50")
        self.mw.title("Registration Form")
        self.mw.resizable(width=False,height=False)
        self.regs=Tkinter.Button(self.mw, text= "Log-in",font="{Arial} 12 {bold}",bg='black',fg='white',command=self.login)
        self.regs.place(rely=0.82,relx=0.1,relwidth=0.30)
        self.start()

    def login(self):
        self.mw.destroy()
        self.mw=Tkinter.Tk()
        self.mw.geometry("650x700""+350+20")
        self.mw.title("Py cos")
        self.mw.resizable(width=False,height=False)
        self.canvas= Tkinter.Canvas(self.mw)
        self.canvas.pack(expand='yes',fill='both')
        self.photo= Tkinter.PhotoImage(file='Image/vote.gif')
        self.canvas.create_image(0,0,image=self.photo,anchor='nw')
        self.mw.mainloop()


    if __name__=="__main__":
        SignUp().mw.mainloop()

而且它不会显示任何错误。

抱歉,您提供的关于您的问题的详细信息很少,因此几乎不可能有任何人来帮助您。首先,您使用的是哪个窗口框架?皮格特?PyQt?wxPython?特金特?还有别的吗?最重要的是,请向我们展示您正在运行的代码。在没有看到代码的情况下帮助您是非常困难的。我使用Tkinter对不起,我的意思是我需要创建一个新窗口而不创建另一个线程。我添加了def run(self):在代码中,我忘了放它,它显示了错误