我正在开发一个工作项目,虽然我在学校学过这个,但我对编程仍然相当陌生。
我在定义中有不同的窗口,当我单击“下一步”按钮时,它们的下一个定义将打开下一个窗口。但是,我不知道如何让新窗口打开后自动关闭前一个窗口。
有部分代码,当我按下按钮“91ERP00500CAA”时,下一个窗口“def caa1”打开,但是第一个窗口不会关闭。
class Window:
def __init__(self, master):
self.master = root
root.title("Housing specification")
master.geometry("1900x1080") #set the size of the screen
#Frame
self.frame = tk.Frame(self.master, width = 200, height = 200)
self.frame.pack()
#Label , welcome to spec
self.label = tk.Label(self.frame, text = "Housing specification")
self.label.place(x = 10, y = 10)
self.buttoncaa = tk.Button(self.frame, text = "91ERP00500CAA", command = self.caa1)
self.buttoncaa.place(x = 30, y = 80)
def quit_win():
win.quit()
#Reference test for CAA specification
def caa1(self):
top = Toplevel()
top.title("91ERP00500CAA - REFERENCE TEST")
top.geometry("1900x1080")
reference = PhotoImage(file = r"C:\Users\rnorris\Desktop\3.10.PNG")
ref = Label(top, image = reference)
ref.pack()
self.ns1 = tk.Button(top, text="Next step", command = self.caa2)
self.ns1.pack()
self.permit1 = tk.Button(top, text="Permits", command = self.permitref)
self.permit1.pack()
mainloop()
我尝试过使用
root.destroy()
,但没有运气。
假设你用类似
的东西初始化
Window
root = tk.Tk()
Window(root)
root.mainloop()
您需要将
__init__
更改为
def __init__(self, master):
self.master = master
self.master.title("Housing specification")
self.master.geometry("1900x1080") #set the size of the screen
因为目前它使用了
root
、master
和 self.master
的混合,而它应该只使用 self.master
。
要在按下按钮时销毁窗口,请将
caa1
更改为
def caa1(self):
self.master.destroy()
top = tk.Tk()
top.title("91ERP00500CAA - REFERENCE TEST")
top.geometry("1900x1080")
self.reference = tk.PhotoImage(file = r"C:\Users\rnorris\Desktop\3.10.PNG")
ref = tk.Label(top, image = self.reference)
ref.pack()
这将销毁第一个窗口并创建一个新窗口。我已将
Toplevel
更改为 Tk
,因为否则当原始窗口被销毁时会创建一个额外的空窗口。一次应该只有一个 Tk
实例,但您在创建下一个实例之前会销毁前一个实例,因此这不是问题。
另请注意,由于
reference
是 caa1
的本地对象,因此它将被垃圾收集。我已将其更改为 self.reference
,这样它就不会被垃圾收集,并且图像将会显示。
虽然上面的方法应该有效,但请考虑使用单个窗口,该窗口对
Tk
进行子类化并更改框架,例如
import tkinter as tk
class Window(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.title("Housing specification")
self.geometry("1900x1080") #set the size of the screen
self.frame_1 = tk.Frame(self, width = 200, height = 200)
self.frame_1.pack()
#Label , welcome to spec
self.label = tk.Label(self.frame_1, text = "Housing specification")
self.label.place(x = 10, y = 10)
self.buttoncaa = tk.Button(self.frame_1, text = "91ERP00500CAA", command = self.caa1)
self.buttoncaa.place(x = 30, y = 80)
def caa1(self):
self.frame_1.pack_forget()
self.title("91ERP00500CAA - REFERENCE TEST")
self.reference = tk.PhotoImage(file = r"C:\Users\rnorris\Desktop\3.10.PNG")
self.frame_2 = tk.Frame(self)
self.frame_2.pack()
self.ref = tk.Label(self.frame_2, image = self.reference)
self.ref.pack()
app = Window()
app.mainloop()
这更容易扩展并且更好用。