Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-全局名称<;功能>;没有定义_Python_User Interface_Tkinter - Fatal编程技术网

python-全局名称<;功能>;没有定义

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

在这种情况下,如何使用来自同一类的方法?我正在尝试制作一个tkinter量表,它会在每次更改时更新。如何收集此值

这是一段代码

比如说,

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=
,因此将使用实例变量对类级变量进行阴影处理,使其毫无意义。这也会导致以后出现细微的错误。