【问题标题】:Execute a method on multiply variables with for loop使用 for 循环在乘法变量上执行方法
【发布时间】:2017-04-23 01:48:29
【问题描述】:

我有一个名称相似的乘法变量(button1、button2、button3 ...等) 我试图制作一个按钮,每次用户点击他时,所有按钮(以及它们特定部分的其他情况)中的文本都会被擦除。

我的代码是这样的:

from tkinter import *
from tkinter import ttk

root = Tk()

def reset():
   pass

button1 = ttk.Button(root, text="bla")
button2 = ttk.Button(root, text="bla")
button3 = ttk.Button(root, text="bla")
button4 = ttk.Button(root, text="bla")
button5 = ttk.Button(root, text="bla")
button6 = ttk.Button(root, text="bla")
button7 = ttk.Button(root, text="bla")
button8 = ttk.Button(root, text="bla")
button9 = ttk.Button(root, text="bla")

reset_button = ttk.Button(root, text="Restart", command=lambda: reset())

root.mainloop()

现在我尝试创建一个生成器,该生成器创建一个多行以使用 for 循环执行,但没有任何成功。 我知道我可以这样做:

def reset():
    button1.config(text="")
    button2.config(text="")
    button3.config(text="")
    button4.config(text="")
    ...

但在代码的其他部分执行此操作似乎真的很不合 Python,我需要一个动态 buttonX.config...

有人知道我该怎么做吗?

【问题讨论】:

  • 使用 容器 保存您的 buttons在容器中循环
  • 任何时候你发现自己创建了带有数字后缀的变量,你应该使用列表或数组。

标签: python python-3.x for-loop tkinter


【解决方案1】:

你可以简单地循环你的按钮(正如 cmets 中已经指出的那样):

def reset():
    for button in [button1, button2, ..., button9]:
        button.config(text="")

如果可以,您可能希望将按钮直接创建为列表的一部分。这可能会也可能不会。我的意思是这样的:

buttons = [ttk.Button(root, text="bla"),
           ttk.Button(root, text="bla"),
           ttk.Button(root, text="bla"),
           ttk.Button(root, text="bla"),
           ttk.Button(root, text="bla"),
           ttk.Button(root, text="bla"),
           ttk.Button(root, text="bla"),
           ttk.Button(root, text="bla"),
           ttk.Button(root, text="bla")]

def reset():
    for button in buttons:
        button.config(text="")

【讨论】:

  • 您的列表仅包含一项。您可以编辑以显示如何创建更多项目吗?
  • 好的,今天我创建了一个列表,其中包含所有按钮,并通过它们的索引号调用它们,它的工作很棒!谢谢
猜你喜欢
  • 2015-01-28
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多