我尝试使用Rushy Panchal上面的例子来使用超过两个窗口。目的是通过调用带有不同小部件的多个窗口进行更改。butnew函数创建不同的按钮以打开不同的窗口。您将包含窗口的类的名称作为参数传递(第二个参数不是必需的,我只是将其放在那里以测试可能的用途。从另一个窗口继承共同的小部件可能很有趣。
最初的回答:
我尝试使用 Rushy Panchal 上面的示例来打开超过两个窗口。我的目的是通过调用拥有不同小部件的多个窗口来进行更改。butnew 函数会创建不同的按钮以打开不同的窗口。您需要将包含窗口的类的名称作为参数传递(第二个参数不是必须的,只是为了测试可能的用途)。从另一个窗口继承相同的小部件可能会很有用。
import tkinter as tk
class Demo1:
def __init__(self, master):
self.master = master
self.master.geometry("400x400")
self.frame = tk.Frame(self.master)
self.butnew("Window 1", "ONE", Demo2)
self.butnew("Window 2", "TWO", Demo3)
self.frame.pack()
def butnew(self, text, number, _class):
tk.Button(self.frame, text = text, width = 25, command = lambda: self.new_window(number, _class)).pack()
def new_window(self, number, _class):
self.newWindow = tk.Toplevel(self.master)
_class(self.newWindow, number)
class Demo2:
def __init__(self, master, number):
self.master = master
self.master.geometry("400x400+400+400")
self.frame = tk.Frame(self.master)
self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.close_windows)
self.label = tk.Label(master, text=f"this is window number {number}")
self.label.pack()
self.quitButton.pack()
self.frame.pack()
def close_windows(self):
self.master.destroy()
class Demo3:
def __init__(self, master, number):
self.master = master
self.master.geometry("400x400+400+400")
self.frame = tk.Frame(self.master)
self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.close_windows)
self.label = tk.Label(master, text=f"this is window number {number}")
self.label.pack()
self.label2 = tk.Label(master, text="THIS IS HERE TO DIFFERENTIATE THIS WINDOW")
self.label2.pack()
self.quitButton.pack()
self.frame.pack()
def close_windows(self):
self.master.destroy()
def main():
root = tk.Tk()
app = Demo1(root)
root.mainloop()
if __name__ == '__main__':
main()
只打开一个新窗口
为了避免多次按下按钮而打开多个相同的窗口,我编写了这个脚本(也可以查看这个页面)。
import tkinter as tk
def new_window1():
global win1
try:
if win1.state() == "normal": win1.focus()
except:
win1 = tk.Toplevel()
win1.geometry("300x300+500+200")
win1["bg"] = "navy"
lb = tk.Label(win1, text="Hello")
lb.pack()
win = tk.Tk()
win.geometry("200x200+200+100")
button = tk.Button(win, text="Open new Window")
button['command'] = new_window1
button.pack()
win.mainloop()
Tk()
窗口上运行两个mainloop()
是不被推荐的。但是,如果你想要多个窗口,可以避免使用两个mainloop()
。因此,你可以使用类似于Tk()
的Toplevel()
小部件。 - Rushy Panchalclose_windows()
吗?它什么时候需要被调用? - sbhatlaDemo2
的“Quit”按钮被单击时,将调用close_window()
。使用tk.Button()
中的参数command
创建此链接。 - Robinclass Demo1()
继承tk.Frame
有什么原因吗? - Stevoisiak