Skip to main content
 首页 » 编程设计

python之我可以使用循环快速生成 x 个复选按钮吗

2025年05月04日15三少

是否可以在 TkInter 中迭代生成 3 个复选按钮。例如,我在下面分别创建了 3 个按钮,但是如果 BtnLst 是这样定义的,我可以通过运行循环来简化这段代码吗?

    BtnLst = ["Power", "Temperature", "Sunlight"] 
    #####Loop here? 

...

    C1 = Checkbutton(frame, text = "Power",\ 
             onvalue = 1, offvalue = 0, height=1, \ 
             width = 10) 
    C1.pack(side=LEFT) 
    C2 = Checkbutton(frame, text = "Temperature",\ 
             onvalue = 1, offvalue = 0, height=1, \ 
             width = 10) 
    C2.pack(side=LEFT,padx =5, ipadx=12) 
    C3 = Checkbutton(frame, text = "Sunlight",\ 
             onvalue = 1, offvalue = 0, height=1, \ 
             width = 10) 
    C3.pack(side=LEFT) 

这在 tkinter 中甚至可能吗,因为我已经分别定义了所有 3 个按钮?

请您参考如下方法:

当然,这很简单。

for name in BtnLst: 
    button = Checkbutton(frame, text=name, onvalue = 1, offvalue = 0, height=1, width = 10) 
    button.pack(side=LEFT) 

如果每个元素都有自己独特的文本、配置选项和回调函数,您仍然可以在列表中创建它们,但您需要在迭代时将这些东西都保存在一个集合中。如果你只有三个按钮,我不建议这样做;由于您正在制作三个列表,因此您并没有真正获得任何复杂性。如果您有 30 个按钮或其他东西,它可能仍然值得做。

names = ["Power", "Temperature", "Sunlight"] 
callbacks = [SomeOtherClass.foo, SomeOtherClass.bar, SomeOtherClass.baz] 
pack_options = [{}, {"padx": 5, "ipadx":12}, {}] 
for name, callback, pack_options in zip(names, callbacks, pack_options): 
    button = Checkbutton(frame, text=name, onvalue = 1, offvalue = 0, height=1, width = 10, command=callback) 
    button.pack(side=LEFT, **pack_options)