具有列表理解的 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
.
列表
我正在 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
.