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))
我正在尝试使用 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))