Python 对象实例缺少属性?

Python object instance missing attribute?

我正在尝试使用 TKinker,但也在尝试理解面向对象的编程。我不断收到同样的错误,

File "C:/Users/User/Documents/Python Scripts/tK_Slider.py", line 28, in getAngle print self.scale1.get() AttributeError: App instance has no attribute 'scale1'

我的代码,

from Tkinter import *

class App:

    def __init__(self, master):

        frame = Frame(master)
        frame.pack()

        self.scale1 = Scale(master, from_=0, to=180, command=self.getAngle(1))
        self.scale1.pack(side=LEFT)
        self.scale2 = Scale(master, from_=0, to=180, command=self.getAngle(2))
        self.scale2.pack(side=LEFT)
        self.scale3 = Scale(master, from_=0, to=180, command=self.getAngle(3))
        self.scale3.pack(side=LEFT)
        self.scale4 = Scale(master, from_=0, to=180, command=self.getAngle(4))
        self.scale4.pack(side=LEFT)

    def getAngle(self, slider):
        if slider==1:
            print self.scale1.get()
        if slider==2:
            print self.scale2.get()            
        if slider==3:
            print self.scale3.get()
        if slider==4:
            print self.scale4.get()

root = Tk()
app = App(root)
root.mainloop()

我误会了什么?

我想在我试图查询它的值之前我已经创建了属性 scale1,那么为什么它没有转移到 getAngle()?

这会立即调用 self.getAngle,此时 self.scale1 尚未设置。

self.scale1 = Scale(master, from_=0, to=180, command=self.getAngle(1))

您需要使用 lambda 函数进行间接寻址:

self.scale1 = Scale(master, from_=0, to=180, command=lambda ev: self.getAngle(1))