我试图了解如何创建小部件。而且我发现以上三个函数正在用于创建窗口小部件,但是我无法提出一个窗口与另一个窗口的区别和优势。即使,我看了一下这个答案,仍然让我感到困惑(它也没说什么winfo_toplevel)。
这是我的代码。
from tkinter import *
root = Tk()
root.title("Root widget")
root.mainloop()
window = Toplevel()
window.title("Window widget")
window.mainloop()
Run Code Online (Sandbox Code Playgroud)
在上面的代码上运行时,将创建“ Root”小部件。在关闭“根”时,将创建两个小部件,其中一个标题为“窗口小部件”,而另一个则不需要。关闭不需要的小部件时,“窗口小部件”也将被销毁。这里实际上发生了什么以及如何克服?
另一个示例:
class ldo(Frame):
def __init__(self, master = None):
Frame.__init__(self,master)
self.grid()
self.appOutline()
def appOutline(self):
top = self.winfo_toplevel()
self.menuBar = Menu(top)
top["menu"] = self.menuBar
self.subMenu1 = Menu(self.menuBar)
self.menuBar.add_cascade(label = "File", menu = self.subMenu1)
app = ldo()
app.master.title("Sample UI")
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
另一方面,此代码使用的winfo_toplevel()是小部件看起来很好的地方。在这里,我的假设是,它Frame起着创建小部件的作用,并且winfo_toplevel()是其他tkinter项目的增强工具。但是想知道它实际上在做什么。
但是,以下代码段不起作用:
winf = winfo_Toplevel()
winf.title("Winfo Widget")
winf.mainloop()
Run Code Online (Sandbox Code Playgroud)
并返回这样的错误:
winf = winfo_Toplevel()
NameError: …Run Code Online (Sandbox Code Playgroud)