[英]Tkinter won't open more than two windows
我正在使用Tkinter在python中編寫程序。 我目前遇到的問題是我有可以打開另一個窗口的按鈕。 我的問題是它不能打開兩個以上的窗口。 有想法該怎么解決這個嗎。
from tkinter import *
class first(object):
def __init__(self, master):
self.master = master
self.admin_btn = Button(master, text = "First", command = self.second)
self.admin_btn.grid(row = 0, column = 0)
def second(self):
self.w = second(self.master)
self.master.wait_window(self.w.top)
class second(object):
def __init__(self, master):
top = self.top = Toplevel(master)
self.second = Button(top, text = "Second", command = self.third)
self.second.grid(row= 0, column = 0)
def third(self):
self.w = third(self.master)
self.master.wait_window(self.w.top)
class third(object):
def __init__(self, master):
top = self.top = Toplevel(master)
self.second = Button(top, text = "Third")
self.second.grid(row= 0, column = 0)
if __name__ == "__main__":
root = Tk()
m = first(root)
root.mainloop()
嘗試使用以下代碼:
import tkinter as tk
class Demo1:
def __init__(self, master):
self.master = master
self.frame = tk.Frame(self.master)
self.button1 = tk.Button(self.frame, text = 'First', width = 25, command = self.new_window)
self.button1.pack()
self.frame.pack()
def new_window(self):
self.newWindow = tk.Toplevel(self.master)
self.app = Demo2(self.newWindow)
class Demo2:
def __init__(self, master):
self.master = master
self.frame = tk.Frame(self.master)
self.quitButton = tk.Button(self.frame, text = 'Second', width = 25, command = self.close_windows)
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()
在這段代碼中,我添加了兩個窗口,但是您可以添加第三個窗口。
你忘了第二個窗口
self.master = master
當您嘗試打開第三個窗口時,您會收到錯誤消息。
但是,您應該將Toplevel(master)
分配給self. master
self. master
,然后使用self.master
而不是self.top
from tkinter import *
class First(object):
def __init__(self, master):
self.master = master # = Tk()
self.btn = Button(self.master, text="First", command=self.second)
self.btn.grid(row=0, column=0)
def second(self):
self.w = Second(self.master)
self.master.wait_window(self.w.master)
class Second(object):
def __init__(self, master):
self.master = Toplevel(master)
self.btn = Button(self.master, text="Second", command=self.third)
self.btn.grid(row=0, column=0)
def third(self):
self.w = Third(self.master)
self.master.wait_window(self.w.master)
class Third(object):
def __init__(self, master):
self.master = Toplevel(master)
self.btn = Button(self.master, text="Third")
self.btn.grid(row=0, column=0)
if __name__ == "__main__":
root = Tk()
first = First(root)
root.mainloop()
現在所有類看起來都非常相似-它們具有self.master = Tk()
或self.master = Toplevel(master)
BTW:使用CamelCase
的類名- First
, Second
, Third
-它有助於識別代碼類。
我建議您所有的類都繼承自Toplevel而不是對象,這樣,您的所有類都將具有master
屬性(這就是您出錯的原因, second
類沒有錯誤):
from tkinter import *
class First(Toplevel):
def __init__(self, master):
Toplevel.__init__(self, master)
self.admin_btn = Button(self, text = "First", command = self.second)
self.admin_btn.grid(row=0, column=0)
def second(self):
self.w = Second(self)
self.wait_window(self.w)
class Second(Toplevel):
def __init__(self, master):
Toplevel.__init__(self, master)
self.second = Button(self, text = "Second", command = self.third)
self.second.grid(row=0, column=0)
def third(self):
self.w = Third(self.master)
self.wait_window(self.w)
class Third(Toplevel):
def __init__(self, master):
Toplevel.__init__(self, master)
self.second = Button(self, text = "Third")
self.second.grid(row=0, column=0)
if __name__ == "__main__":
root = Tk()
m = First(root)
m.lift(root)
root.wait_window(m)
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.