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

问题描述

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

我试过了:

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)

它只是给我一个错误,未定义“版本”,但我希望按钮定义它

有什么建议吗?

解决方法

您设置变量的请求很奇怪,而且可能不是您要解决的任何问题的正确解决方案。

话虽如此,您可以使用 setattr 根据变量的名称设置值。该变量不一定存在。例如,要将变量 self.edition 设置为 1,您可以执行 setattr(self,"edition",1)

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

它看起来像这样:

def whichButton(self,_var,_pressedButton):
    setattr(self,_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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...