Python 我可以使用循环快速生成x个数量的复选按钮吗?

Python 我可以使用循环快速生成x个数量的复选按钮吗?,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,是否可以在TkInter中迭代生成3个检查按钮。例如,我在下面单独创建了3个按钮,但如果BtnLst定义为循环,我可以通过运行循环来简化代码吗 BtnLst = ["Power", "Temperature", "Sunlight"] #####Loop here? 这在tkinter中是否可能,因为我已经分别定义了所有3个按钮 当然,这很简单 for name in BtnLst: button = Checkbutton(frame, text=name, onv

是否可以在TkInter中迭代生成3个检查按钮。例如,我在下面单独创建了3个按钮,但如果BtnLst定义为循环,我可以通过运行循环来简化代码吗

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

这在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)
当然,很简单

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)

使用列表理解创建按钮列表:

C = [Checkbutton(frame, text=x, onvalue=1, offvalue=0, height=1, width = 10)
      for x in BtnList]
然后根据需要打包

C[0].pack(side=LEFT)
C[1].pack(side=LEFT, padx=5, ipadx=12)
C[2].pack(side=LEFT)

使用列表理解创建按钮列表:

C = [Checkbutton(frame, text=x, onvalue=1, offvalue=0, height=1, width = 10)
      for x in BtnList]
然后根据需要打包

C[0].pack(side=LEFT)
C[1].pack(side=LEFT, padx=5, ipadx=12)
C[2].pack(side=LEFT)

请阅读请阅读关于
padx=5,ipadx=12的内容,我认为这实际上并不重要。如果只有一个按钮具有这些属性,那就没有多大意义了。@TidB我指定中间填充的原因是“温度”一词在按钮中环绕时的长度x。按照这种方法,我如何确保它不会在一行中全部换行和显示?我不认为您可以为每个按钮指定
padx=5,ipadx=12
,不管它们是否会换行?@Kevin不是真的,因为我仍然希望实际的复选框与相应的文本接近。关于
padx=5,ipadx=12,我认为这实际上并不重要。如果只有一个按钮具有这些属性,那就没有多大意义了。@TidB我指定中间填充的原因是“温度”一词在按钮中环绕时的长度x。按照这种方法,我如何才能确保它不会在一行上全部换行和显示?我不认为您可以为每个按钮指定
padx=5,ipadx=12
,而不管它们是否会换行?@Kevin不是这样,因为我仍然希望实际的复选框接近相应的文本