尝试了解如何指定哪个窗口将容纳哪个小部件。 我在一些看似非常基本的事情上遇到了困难,但我看不到它。 以下内容来自维基百科(https://en.wikipedia.org/wiki/Tkinter):
import tkinter as tk
class Application(tk.Frame):
def __init__(self, root=None):
tk.Frame.__init__(self, root)
self.grid()
self.createWidgets()
def createWidgets(self):
self.medialLabel = tk.Label(self, text='Hello World')
self.medialLabel.config(bg="#00ffff")
self.medialLabel.grid()
self.quitButton = tk.Button(self, text='Quit', command=self.quit)
self.quitButton.grid()
app = Application()
app.root = tk.Tk()
app.root.title('Sample application')
app.mainloop()
我的问题: 为什么会弹出2个窗口?如何重写它以使小部件显示在“示例应用程序”窗口中?我如何使用 OOP 更改此设置以在一个窗口中显示标签并在另一个窗口中显示按钮?
我已经从代码中删除了“root”:输出没有变化。消除 self.grid() 会显示 2 个空窗口,消除该函数并将标签和按钮移至主代码也是如此。 tk.Frame 似乎什么也没做
当创建
app
(a tk.Frame
)时,将隐式创建一个root窗口。 所以 app.root
是第二个根窗口。
您可以先显式创建根窗口,然后创建
Application
的实例:
import tkinter as tk
class Application(tk.Frame):
def __init__(self, root=None):
tk.Frame.__init__(self, root)
#self.grid()
self.createWidgets()
def createWidgets(self):
self.medialLabel = tk.Label(self, text='Hello World')
self.medialLabel.config(bg="#00ffff")
self.medialLabel.grid()
self.quitButton = tk.Button(self, text='Quit', command=self.quit)
self.quitButton.grid()
root = tk.Tk()
root.title('Sample application')
app = Application(root)
app.grid()
root.mainloop()
或者你可以简单地让
Application
继承自 tk.Tk
:
class Application(tk.Tk):
def __init__(self):
super().__init__()
self.title('Sample application')
self.createWidgets()
def createWidgets(self):
self.medialLabel = tk.Label(self, text='Hello World')
self.medialLabel.config(bg="#00ffff")
self.medialLabel.grid()
self.quitButton = tk.Button(self, text='Quit', command=self.quit)
self.quitButton.grid()
Application().mainloop()