我正在学习Python中的tkinter包,我对下一段代码并不了解:
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
self.create_widgets()
def create_widgets(self):
self.hi_there = tk.Button(self)
self.hi_there["text"] = "Hello World\n(click me)"
self.hi_there["command"] = self.say_hi
self.hi_there.pack(side="top")
self.quit = tk.Button(self, text="QUIT", fg="red", command=root.destroy)
self.quit.pack(side="bottom")
def say_hi(self):
print("hi there, everyone!")
root = tk.Tk()
app = Application(master=root)
app.mainloop()
据我所知self
引用了类,当代码显示self.hi_there
时,我希望该类中的全局变量必须先前声明。 hi_there
是如何创建的?
还有什么用于拥有" master = None"在__init__
方法?如果我从=None
app = Application(master=root)
跳过$ composer install --prefer-source
部分,那么它是否会相同?
答案 0 :(得分:1)
self
指的是实例。 self.hi_there
是一个实例变量。通过执行app = Application(master=root)
,您可以创建Application
的实例并将其保存到app
。在您的情况下,self
为app
。
在创建属性之前,您不需要声明属性(尽管在__init__
中创建属性是一种很好的做法)。
考虑例子:
class A()
pass
a = A()
a.prop = 2
print(a.prop) #=> 2
关于master=None
- 事实上,如果是您的代码,您只能使用master
而且您知道自己会通过该代码。
答案 1 :(得分:1)
self
引用类的实例,因此self.hi_there = foo
将创建一个新的实例变量并将其分配给foo
,如:
class Test:
def __init__(self):
self.foo = 'bar'
a = Test()
print(a.foo)
# output:
# bar
并且master=None
将默认None
值设置为master
,除非您提供该值,例如:
app = Application() # here master will be None
app = Application(master=root) # here master will be root
这可以用于任何功能,这是另一个例子:
def plus(num=0):
return num+num
print(plus(1))
print(plus())
# output:
# 2
# 0