Tkinter:通过单击按钮为变量分配值
Tkinter: Assign Variables with Value with a Button Click
我想制作一个按钮,以紧凑的形式为新变量分配一个值。
我试过这个:
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)
它只是给我一个错误,未定义“版本”,但我希望按钮定义它
有什么建议吗?
您要求设置 new 变量的请求很奇怪,而且可能不是您要解决的任何问题的正确解决方案。
话虽如此,您可以使用 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.edition
或 self.abonnement
。
几乎肯定有更好的解决方案来解决您的问题,但您的问题并未提供有关您真正要解决的问题的任何详细信息。一个简单的改进是使用字典来保存你的“新”变量,而不是创建字面上的新变量。
您可以通过在 __init__
中定义字典然后在 whichButton
函数中设置它来实现。
看起来像这样:
class Something:
def __init__(self):
self._vars = {}
def whichButton(self, name, new_value):
self._vars[name] = new_value
这样做的好处是所有这些特殊变量都存在于一个数据结构中,与对象分开。这意味着不可能意外覆盖实例变量。
我想制作一个按钮,以紧凑的形式为新变量分配一个值。
我试过这个:
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)
它只是给我一个错误,未定义“版本”,但我希望按钮定义它
有什么建议吗?
您要求设置 new 变量的请求很奇怪,而且可能不是您要解决的任何问题的正确解决方案。
话虽如此,您可以使用 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.edition
或 self.abonnement
。
几乎肯定有更好的解决方案来解决您的问题,但您的问题并未提供有关您真正要解决的问题的任何详细信息。一个简单的改进是使用字典来保存你的“新”变量,而不是创建字面上的新变量。
您可以通过在 __init__
中定义字典然后在 whichButton
函数中设置它来实现。
看起来像这样:
class Something:
def __init__(self):
self._vars = {}
def whichButton(self, name, new_value):
self._vars[name] = new_value
这样做的好处是所有这些特殊变量都存在于一个数据结构中,与对象分开。这意味着不可能意外覆盖实例变量。