是否可以在 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)
