Python 新窗口是空的
我正在尝试用蟒蛇3学习tkinter。 由于某些原因,新窗口是空的(文件>新测试),我不明白为什么。没有关于错误的信息。 我猜这是与pack()有关的,但文档中说Toplevel不需要pack()。 您能告诉我如何在新窗口中显示内容吗Python 新窗口是空的,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正在尝试用蟒蛇3学习tkinter。 由于某些原因,新窗口是空的(文件>新测试),我不明白为什么。没有关于错误的信息。 我猜这是与pack()有关的,但文档中说Toplevel不需要pack()。 您能告诉我如何在新窗口中显示内容吗 import tkinter as tk import sys class MenuBar(tk.Menu): def __init__(self, master): tk.Menu.__init__(self, master)
import tkinter as tk
import sys
class MenuBar(tk.Menu):
def __init__(self, master):
tk.Menu.__init__(self, master)
fileMenu = tk.Menu(self, tearoff=0)
self.add_cascade(label="File", underline=0, menu=fileMenu)
fileMenu.add_command(label="Exit", underline=1, command=self.quit)
fileMenu.add_command(label="Start Test", underline=1, command=self.start_test)
def quit(self):
sys.exit(0)
def start_test(self):
self.app = RunTestWindow(self)
class MainWindow(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master.title("Quiz")
self.menubar = MenuBar(self)
self.master.config(menu=self.menubar)
self.button1 = tk.Button(self)
self.button1['text'] = "Hello!"
self.button1.grid(row=2, column=0)
self.canvas = tk.Canvas(self, bg="white", width=400, height=400,
bd=0, highlightthickness=0)
self.canvas.grid(row=3, column=0)
class RunTestWindow(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.window = tk.Toplevel(self)
self.label = tk.Label(self, text="Show me my new window")
self.label.grid(row=1, column=0)
root = tk.Tk()
mw = MainWindow(root)
mw.pack()
root.mainloop()
小部件中有错误的父项,您可能必须使用
pack()
在窗口中显示帧
def start_test(self):
self.subwindow = tk.Toplevel(self)
self.app = RunTestWindow(self.subwindow)
self.app.pack()
您可以通过多种方式对其进行更改,但可以像创建主窗口一样进行更改
def start_test(self):
self.subwindow = tk.Toplevel(self)
self.app = RunTestWindow(self.subwindow)
self.app.pack()
然后在课堂上你不需要Toplevel()
顺便说一句:要关闭它,你需要在主窗口
self.subwindow.destroy()
或者在RunTestWindow()中
比如说
class RunTestWindow(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.label = tk.Label(self, text="Show me my new window")
self.label.grid(row=1, column=0)
self.button = tk.Button(self, text="Close", command=self.master.destroy)
self.button.grid(row=2, column=0)
完整工作代码
import tkinter as tk
import sys
class MenuBar(tk.Menu):
def __init__(self, master):
tk.Menu.__init__(self, master)
fileMenu = tk.Menu(self, tearoff=0)
self.add_cascade(label="File", underline=0, menu=fileMenu)
fileMenu.add_command(label="Exit", underline=1, command=self.quit)
fileMenu.add_command(label="Start Test", underline=1, command=self.start_test)
def quit(self):
sys.exit(0)
def start_test(self):
self.subwindow = tk.Toplevel(self)
self.app = RunTestWindow(self.subwindow)
self.app.pack()
class MainWindow(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master.title("Quiz")
self.menubar = MenuBar(self)
self.master.config(menu=self.menubar)
self.button1 = tk.Button(self)
self.button1['text'] = "Hello!"
self.button1.grid(row=2, column=0)
self.canvas = tk.Canvas(self, bg="white", width=400, height=400,
bd=0, highlightthickness=0)
self.canvas.grid(row=3, column=0)
class RunTestWindow(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.label = tk.Label(self, text="Show me my new window")
self.label.grid(row=1, column=0)
self.button = tk.Button(self, text="Close", command=self.master.destroy)
self.button.grid(row=2, column=0)
root = tk.Tk()
mw = MainWindow(root)
mw.pack()
root.mainloop()
请也标记Python。您在小部件中有错误的父部件-您必须将小部件放入self.window
。或者Frame
必须使用self.window
作为父窗口,并使用pack()
在窗口中显示框架。非常感谢。这有帮助@在这一点上,我宁愿从顶层继承RunTestWindow
,而不是从框架继承。不幸的是,它对我不起作用。它只有在小部件中使用self.window时才有效。我从未在python中使用过这么多类。这有点混乱。我添加了完整的工作代码。并与你的非工作版本进行比较。工作!非常感谢。
import tkinter as tk
import sys
class MenuBar(tk.Menu):
def __init__(self, master):
tk.Menu.__init__(self, master)
fileMenu = tk.Menu(self, tearoff=0)
self.add_cascade(label="File", underline=0, menu=fileMenu)
fileMenu.add_command(label="Exit", underline=1, command=self.quit)
fileMenu.add_command(label="Start Test", underline=1, command=self.start_test)
def quit(self):
sys.exit(0)
def start_test(self):
self.subwindow = tk.Toplevel(self)
self.app = RunTestWindow(self.subwindow)
self.app.pack()
class MainWindow(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master.title("Quiz")
self.menubar = MenuBar(self)
self.master.config(menu=self.menubar)
self.button1 = tk.Button(self)
self.button1['text'] = "Hello!"
self.button1.grid(row=2, column=0)
self.canvas = tk.Canvas(self, bg="white", width=400, height=400,
bd=0, highlightthickness=0)
self.canvas.grid(row=3, column=0)
class RunTestWindow(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.label = tk.Label(self, text="Show me my new window")
self.label.grid(row=1, column=0)
self.button = tk.Button(self, text="Close", command=self.master.destroy)
self.button.grid(row=2, column=0)
root = tk.Tk()
mw = MainWindow(root)
mw.pack()
root.mainloop()