我正在尝试使用函数更改类中的Label。
class Fenster2(tk.Frame):
def __init__(self, parent,controller):
tk.Frame.__init__(self,parent)
label_fluss1 = tk.Label(self, width=9)
label_fluss1.grid(row=3,column=2)
label_fluss2 = tk.Label(self, width=9)
label_fluss2.grid(row=4,column=2)
GPIO.add_event_detect(27,GPIO.RISING,callback=hochzaehlen1)
GPIO.add_event_detect(22,GPIO.RISING,callback=hochzaehlen2)
GPIO.add_event_detect(23,GPIO.FALLING,callback=interrupt)
def hochzaehlen1(callback):
global ticks1
ticks1 +=1
return ticks1
def hochzaehlen2(callback):
global ticks2
ticks2 +=1
return ticks2
def interrupt(callback):
global ticks1
global ticks2
global fluss1
fluss1=ticks1/582.0 # liter/min
fluss2=ticks2/354.0 # liter/min
ticks1=0
ticks2=0
Fenster2.label_fluss1.config(text=str(fluss1))
pb_fluss1.config(value=fluss1)
label_fluss2.config(text=str(fluss2))
pb_fluss2.config(value=fluss2)
现在,当interrupt
尝试配置label_fluss1
时,它说Fenster2
没有实例label_fluss1
。谁知道如何使这项工作?
我知道我会在label_fluss2
和两个进度条中遇到同样的问题。
任何建议都非常感谢。
问候塞巴斯蒂安
答案 0 :(得分:0)
相信在创建类时需要对这些变量使用self。这可能是造成这种情况的问题。所以在你的 init ()中你会得到:
self.label_fluss1 = tk.Label()
您可以对定义的init和方法中的所有变量执行此操作。 至于类本身的问题,为什么你要使所有方法的回调都不存在?
我会在https://docs.python.org/3/tutorial/classes.html上更多地创建类,以便更好地理解实例变量,全局变量和本地变量。这些驻留的范围对于使用非常重要。如果正确创建了类,则没有理由在创建对象时不应该具有fluss1属性。现在看来,你需要在这些变量之前定义self。然后从那里开始正确地构建你的类,根据需要调用这些属性。
答案 1 :(得分:0)
您缺少对课程如何运作的基本了解。您需要创建要更新实例变量的变量,然后以相同的方式调用它:
class Fenster2(tk.Frame):
def __init__(self, parent,controller):
tk.Frame.__init__(self,parent)
self.label_fluss1 = tk.Label(self, width=9)
self.label_fluss1.grid(row=3,column=2)
# etc...
def interrupt(self):
#etc ...
self.label_fluss1.config(text=str(fluss1))
我建议您在继续之前找到关于类的基本教程,因为GUI严重依赖于它们。