Python / Tkinter:使用按钮更新类变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python / Tkinter:使用按钮更新类变量相关的知识,希望对你有一定的参考价值。

这可能是一个愚蠢的问题,但我在这里找不到答案,所以这里就是这样。

我正在设置一个Tkinter接口,而我只有一个按钮。单击此按钮时应将变量go更改为1,我已经通过要求它调用与同一类中的函数getGo(self)来完成此操作。设置按钮的init功能。

我的问题是它没有运行整个goTime()函数:即,它不会更新我的变量go

init功能:

class New_Toplevel_1:
    go=0
    def __init__(self, top=None):
        self.butGo = Button(top,command=lambda *args: goTime(self))
        self.butGo.place(relx=0.48, rely=0.84, height=41, width=65)
        self.butGo.configure(activebackground="#7bd93b")
        self.butGo.configure(font=font12)
        self.butGo.configure(text='''Go!''')

    def goTime(self):
        print("It's go time!")
        self.go=1
        print("go has been updated")

输出看起来像这样(重复我点击按钮的次数):

It's go time!
It's go time!
It's go time!
It's go time!

为什么不更新变量?或甚至显示“go has been updated”?谢谢!

答案

你错误地传递了command参数,只是这样做:

self.butGo = Button(top, command=self.goTime)

要引用实例方法/属性,你必须做self.method_nameself只是一个约定)

如果需要传递参数,可以使用lambda:

command=lambda: self.go_time(5)
command=lambda n: self.go_time(n)
...

虽然我更喜欢functools.partial

from functools import partial

class NewToplevel1:
    go = 0

    def __init__(self, top=None):
        self.butGo = Button(top, command=partial(self.go_time, 5))
        self.butGo.place(relx=0.48, rely=0.84, height=41, width=65)
        self.butGo.configure(activebackground="#7bd93b")

        self.butGo.configure(text='''Go!''')

    def go_time(self, n):
        print("It's go time!")
        self.go = n
        print("go has been updated")
        print(self.go)

以上是关于Python / Tkinter:使用按钮更新类变量的主要内容,如果未能解决你的问题,请参考以下文章

使用 Tkinter 按下按钮后更新标签 [重复]

不断更新 tkinter 中的图形

在python tkinter中调用事件时,变量不更新的标签

tkinter 单选按钮未在类中显示值

Python Tkinter 从标签中删除/删除图像

无法使用按钮和自定义数据更新 Tkinter matplotlib 图