【问题标题】:What is the difference between self and not self objects particularly in Tkinter class?自我对象和非自我对象之间有什么区别,特别是在 Tkinter 类中?
【发布时间】:2020-06-01 20:05:38
【问题描述】:

我有这个简单的 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()

两者的工作方式相似,但有什么区别,我应该使用哪一个?

【问题讨论】:

  • self 是您调用该方法的实例。对self 的赋值(相反,无论first 位置参数是什么,它只是传统上 称为self)将创建实例属性。

标签: python class object tkinter self


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    区别在于btn1是一个局部变量,只在使用它的函数中可用。 self.btn1 是一个实例变量,可在类中的每个函数中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 2020-02-06
      • 2011-09-23
      相关资源
      最近更新 更多