python-全局名称<;功能>;没有定义
在这种情况下,如何使用来自同一类的方法?我正在尝试制作一个tkinter量表,它会在每次更改时更新。如何收集此值 这是一段代码 比如说,python-全局名称<;功能>;没有定义,python,user-interface,tkinter,Python,User Interface,Tkinter,在这种情况下,如何使用来自同一类的方法?我正在尝试制作一个tkinter量表,它会在每次更改时更新。如何收集此值 这是一段代码 比如说, class Humidity(Page): humidityValue = 0 def __init__(self, *args, **kwargs): Page.__init__(self, *args, **kwargs) container = tk.Frame(self) container.pack
class Humidity(Page):
humidityValue = 0
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", expand =True, fill = "both")
humidityScale = tk.Scale(container, from_=0, to=60, tickinterval=10, width= 30,
orient="horizontal", borderwidth = 0, highlightthickness= 0, length=800, command=set_humidity)
humidityLabel = tk.Label(container, text="Humidity(%)" , fg='White')
humidityScale.pack(side="top")
humidityScale.set(25) #Sets humidity values to 25%
humidityLabel.pack(side="bottom")
humidityValue = humidityScale.get()
def get_humidity(self):
print self.humidityValue
def set_humidity(val):
humidityValue = val
将返回一个错误,说明:未定义全局名称“set\u湿度”当您在
初始值中声明属性时,忘记在湿度值后面添加:
humidityValue=humidityScale.get()
应该是self.humidityValue=humidityScale.get()
这是必需的,这样使用类创建的对象和类内的函数(如您所见)都可以自引用属性
您可能需要对\uuuu init\uuuu
中的其他变量进行相同的更改(例如humidityScale
,humidityLabel
)
关于为什么你的函数set\u-weathy
不起作用-你忘了添加self
作为函数的第一个参数,就像你使用get\u-weathy
@pam一样,你能发布完整的回溯错误吗?最好是在你的问题的主体中,它仍然会给我同样的错误,我甚至试着按照你的建议去做,并定义set_湿度(val):humidityValue=humidityScale.get(),但它说humidityScale不是为humidityScale定义的。get()@pam检查我的答案的底部python!=JAVA实例变量需要显式引用,在方法中,这是通过self
实现的,但请注意,实际名称self
是一种约定。您可以使用任何您想要的,但它始终是该方法的第一个参数。您应该熟悉一些Python OOP教程。从官员开始会很好。还要注意的是,在Python中使用getter和setter是不习惯的。@juanpa.arrivillaga谢谢,我明确地认为它就像Java一样,区别现在已经很清楚了。还要注意的是,除非您确实想要创建一个静态类变量,否则您不应该在类级别上放置humidityValue=0
。但是,由于在构造函数中要分配给self.humidityValue=
,因此将使用实例变量对类级变量进行阴影处理,使其毫无意义。这也会导致以后出现细微的错误。