是"自我"和" root"在Python类中创建按钮时有什么不同?

时间:2017-01-23 02:20:45

标签: python class tkinter frame

在下面的脚本中,button_01和button_02在" self"中创建。和" root"分别。它们的创建是否有任何功能差异? GUI看起来都是一样的。

import Tkinter as tk

class App(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)

        frame1 = tk.Frame(root, padx=2, pady=2, borderwidth=2, relief="raised")
        frame1.pack(side=tk.RIGHT)

        button_01 = tk.Button(self, text ="tk Button 1") # self with tk.Button
        button_01.config(width=15, fg="black", bg="lightskyblue")
        button_01.pack(side=tk.BOTTOM)

        button_02 = tk.Button(root, text ="tk Button 2") # root with tk.Button
        button_02.config(width=15, fg="black", bg="lime")
        button_02.pack(side=tk.BOTTOM)

        button_03 = tk.Button(frame1, text ="tk Button 3") # frame1 with tk.Button
        button_03.config(width=15, fg="black", bg="lightcoral")
        button_03.pack(side=tk.TOP)

if __name__ == "__main__":
    root = tk.Tk()
    app = App(root)
    app.pack(fill="both", expand=True)
#
    root.mainloop()

1 个答案:

答案 0 :(得分:0)

不,selfroot不一样。窗口小部件位于树状层次结构中,具有单个根。当您致电tk.Tk()时,您正在创建此根窗口。

self表示方法所属的对象。在这种情况下,窗口小部件是tk.Frame的子类,它是root的子节点。

尝试为框架提供背景颜色(例如:self.configure(background="red"),您将看到按钮具有不同的父级。在此特定示例中,gui看起来是相同的,无论您使用root还是{{1只是因为它是一个非常简单的gui,布局非常简单。