更改类中的tkinter-label

时间:2017-03-20 17:38:32

标签: python python-2.7 tkinter

我正在尝试使用函数更改类中的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和两个进度条中遇到同样的问题。 任何建议都非常感谢。 问候塞巴斯蒂安

2 个答案:

答案 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严重依赖于它们。