首页 > 解决方案 > 自我对象和非自我对象之间有什么区别,特别是在 Tkinter 类中?

问题描述

我有 self.btn1 这个简单的代码

from tkinter import Tk, ttk, messagebox
import tkinter as tk

class Main(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        self.btn1 = ttk.Button(self, text="test")
        self.btn1.pack()

if __name__ == "__main__":
    root = tk.Tk()
    app = Main(root)
    app.pack()
    root.mainloop()

这段代码没有自我按钮

from tkinter import Tk, ttk, messagebox
import tkinter as tk

class Main(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        btn1 = ttk.Button(self, text="test")
        btn1.pack()

if __name__ == "__main__":
    root = tk.Tk()
    app = Main(root)
    app.pack()
    root.mainloop()

它们的工作原理相似,但有什么区别,我应该使用哪一个?

标签: pythonclassobjecttkinterself

解决方案


Button唯一真正的区别在于,如果您需要,检索对实例的引用是多么容易。对于前者,它只是app.btn1. 对于后者,它是app.winfo_children()[0].

>>> app.winfo_children()[0] is app.btn1
True

推荐阅读