具有列表理解的 TKinter 按钮实例化

TKinter Button instantiation with list comprehension

我正在 tkinter 中创建一个 GUI,并尝试使用列表理解来创建按钮。 但是,我很难让列表理解真正将 'btn' 替换为 'btn_list' 中的名称。如果有人知道这样做的巧妙方法,我将不胜感激。

start_btn, pause_btn, reset_btn, stat_btn = (Button(),) * 4
btn_list = [start_btn, pause_btn, reset_btn, stat_btn]

[btn.grid(row=2, column=col) for col, btn in enumerate(btn_list)]

如果您改为在 class 中创建按钮,并为列表理解中的每个项目添加启动 class,那应该有效。

import tkinter as tk


class CreateButton:
    """Create button class"""
    def __init__(self, **kwargs):
        self.button = tk.Button(**kwargs)


window = tk.Tk()
button_text = ["Test1", "Test2"]
buttons = [CreateButton(master=window, text=text, width=20) for text in button_text]
for button in buttons:
    button.button.pack()

window.mainloop()

当您执行 (Button(),) * 4 时,您会得到一个包含 4 次相同按钮的元组。如果你想要 4 个不同的按钮,你可以通过列表理解来实现:

btn_list = [Button() for i in range(4)]

我看不出使用列表理解而不是常规 for 循环来对它们进行网格化的意义,因为它给你一个无用的 None.

列表