python - Tkinter:通过单击按钮为变量赋值
问题描述
我想制作一个 Button,它以紧凑的形式分配一个具有值的新变量。
我试过这个:
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, _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
这样做的好处是所有这些特殊变量都存在于单个数据结构中,与对象分开。这意味着不可能意外覆盖实例变量。
推荐阅读
- javascript - 在“IF-STATEMENT”中成功后显示模式对话框
- ios - iOS 金属。如何对所有色彩作品使用“半”格式?
- flutter - Flutter 必填关键字
- java - 如何使用 JAVA High Level Rest Client 获取索引中存在的文档网总数
- regex - Chrome 开发者工具 - 使用过滤器文本字段来匹配多个请求
- terraform - Terraform - 使用字符串连接/连接变量
- kubernetes - kubeadm init 命令创建的 coredns pod 失败
- drilldown - 在 echarts 中下钻后如何查看之前的图表?
- java - 使用具有固定种子的 SecureRandom 对象构建 Cipher 对象是否安全?
- c# - 如何根据给定值返回评级