更改类中的tkinterlabel

2024-10-01 04:53:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用函数更改类中的标签。在

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和两个progressbar都会遇到相同的问题。 任何建议都将不胜感激。 你好,塞巴斯蒂安


Tags: selfeventaddconfiggpiodefcallbackglobal
2条回答

相信在创建一个类时,需要在这些变量上使用self。这可能是导致这个问题的原因。因此,在您的初始化()中,您将拥有:

self.label_fluss1 = tk.Label()

您将对init中定义的所有变量和方法执行此操作。 至于类本身,为什么要将所有方法都作为回调的子类而不存在呢?在

为了更好地理解实例变量、全局变量和局部变量,我将阅读更多关于https://docs.python.org/3/tutorial/classes.html创建类的内容。它们所在的范围对于使用非常重要。如果类是正确创建的,那么在创建对象时就没有理由不让它具有fluss1属性。但现在的情况是,您需要在这些变量之前定义self。然后从那里开始适当地构造类,以便根据需要调用这些属性。在

你缺少了对课堂工作原理的基本理解。您需要使要更新实例变量的变量,然后以相同的方式调用它:

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非常依赖它们。在

相关问题 更多 >