Tkinter:通过单击按钮为变量赋值

2024-10-04 01:27:39 发布

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

我想制作一个按钮,以紧凑的形式为新变量赋值

我试过这个:

def whichButton(self, _var, _pressedButton):
    self._var = _pressedButton 

def checkScooter(self):
    self.checkScooter = Button(window, text="Standard", command=lambda: self.whichButton(edition, 1))
    self.checkScooter(row=1, column=0)

def checkAbonnement(self):
    self.checkAbonnement = Button(window, text="Gold", command=lambda: self.whichButton(abonnement, 3))
    self.checkAbonnement(row=1, column=0)

它只是给了我一个错误,“版本”没有定义,但我想用按钮来定义它

有什么建议吗


Tags: lambdatextselfvardefcolumnbuttonwindow
1条回答
网友
1楼 · 发布于 2024-10-04 01:27:39

您要求设置一个变量的请求很奇怪,对于您试图解决的任何问题,可能都不是正确的解决方案

也就是说,可以使用setattr根据变量的名称设置值。这个变量不一定存在。例如,要将变量self.edition设置为1,可以执行setattr(self, "edition", 1)

因此,您可以将变量的字符串名称传递给whichButton函数,并使用setattr设置具有该名称的变量

它看起来像这样:

def whichButton(self, _var, _pressedButton):
    setattr(self, _var, _pressedButton)
...
self.checkScooter = Button(..., command=lambda: self.whichButton("edition", 1))
...
self.checkAbonnement = Button(..., command=lambda: self.whichButton("abonnement", 3))

在上面的代码中,单击任一按钮将设置self.editionself.abonnement


对于你的问题,几乎可以肯定有更好的解决方案,但你的问题并没有提供任何关于你真正想要解决的问题的细节。对此的一个简单改进是使用字典保存“新”变量,而不是创建字面上的新变量

您可以通过在__init__中定义一个字典,然后在whichButton函数中设置它来实现

它看起来像这样:

class Something:
    def __init__(self):
        self._vars = {}
    def whichButton(self, name, new_value):
        self._vars[name] = new_value

这样做的好处是,所有这些特殊变量都存在于一个单独的数据结构中,与对象分离。这意味着不可能意外地覆盖实例变量

相关问题 更多 >