【问题标题】:Tkinter: Assign Variables with Value with a Button ClickTkinter:通过单击按钮为变量赋值
【发布时间】:2021-06-13 22:34:19
【问题描述】:

我想制作一个 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)

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

有什么建议吗?

【问题讨论】:

  • 这样做不是一个好习惯。为什么不将其拆分为 2 个功能?
  • 我编辑的,你是这个意思吗?
  • 我的意思是拆分它,以便 2 个按钮调用 2 个不同的功能。如果您这样做,这些功能将是微不足道的。
  • 不会溢出程序吗?如果你每次都做一个新功能?编辑:我只需要为我的程序做 2 个功能,但如果你有多个?
  • 它将使其更具可读性。如果您的程序不可读,则以后无法对其进行调试。如果你真的想按照自己的方式做,我可以写一个答案,但它真的很难看,如果出现错误,......

标签: python tkinter tkinter-button


【解决方案1】:

您设置 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.editionself.abonnement


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

您可以通过在 __init__ 中定义字典,然后在 whichButton 函数中设置它来做到这一点。

看起来像这样:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 2021-07-02
    • 2018-11-05
    • 2020-10-03
    • 1970-01-01
    • 2015-04-30
    • 2016-11-21
    • 1970-01-01
    相关资源
    最近更新 更多