Tkinter 不会打开超过两个 windows
Tkinter won't open more than two windows
我正在 python 使用 Tkinter 开发一个程序。我目前遇到的问题是我有打开另一个 windows 的按钮。我的问题是它不能打开超过两个 windows。关于如何解决这个问题的任何想法。
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()
在此代码中我添加了两个 windows 但您可以添加第三个。
你第二个忘记了window
self.master = master
当您尝试打开第三个 window 时收到错误消息。
但您应该将 Toplevel(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)
顺便说一句:对 类 使用 CamelCase
名称 - First
、Second
、Third
- 它有助于识别代码中的 类。
我建议你所有的 classes 继承自 Toplevel 而不是对象,这样,你所有的 classes 都会有一个 master
属性(这就是为什么你有一个错误,second
class 没有):
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()
我正在 python 使用 Tkinter 开发一个程序。我目前遇到的问题是我有打开另一个 windows 的按钮。我的问题是它不能打开超过两个 windows。关于如何解决这个问题的任何想法。
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()
在此代码中我添加了两个 windows 但您可以添加第三个。
你第二个忘记了window
self.master = master
当您尝试打开第三个 window 时收到错误消息。
但您应该将 Toplevel(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)
顺便说一句:对 类 使用 CamelCase
名称 - First
、Second
、Third
- 它有助于识别代码中的 类。
我建议你所有的 classes 继承自 Toplevel 而不是对象,这样,你所有的 classes 都会有一个 master
属性(这就是为什么你有一个错误,second
class 没有):
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()