所以我试着写一组复选框(我实际应该把它写成一个类,因为我们很可能会添加其他复选框)
到目前为止,我已经得到了这个,但这会重复代码,因此效率不高。在哪些方面我可以使代码更优雅?
var1 = IntVar()
var2 = IntVar()
var3 = IntVar()
c1 = Checkbutton(text="Snagit", variable=var1)
c1.pack()
c2 = Checkbutton(text="Camtasia", variable=var2)
c2.pack()
c3 = Checkbutton(text="GotoMeeting", variable=var3)
c3.pack()
app.mainloop()
check1 = var1.get()
check2 = var2.get()
check3 = var3.get()
答案 0 :(得分:3)
以下是如何使用循环使其更好一点的快速示例:
check_names = ["Snagit", "Camtasia", "GotoMeeting"]
variables = []
for name in check_names:
variables.append(IntVar())
Checkbutton(text=name, variable=variables[-1]).pack()
app.mainloop()
checks = [variable.get() for variable in variables]
答案 1 :(得分:3)
我提出这个解决方案虽然使用itertools
模块可能看起来有点令人生畏但我发誓学习它是为了你自己的利益! :)
labels = ("snagit", "camtasia", "gotomeeting")
vars = [IntVar() for _ in labels]
for name, v in itertools.izip(labels, vars):
Checkbutton(text=name, variable=v).pack()
app.mainloop()
checks = [v.get() for v in vars]
答案 2 :(得分:2)
vars = {}
buttons = {}
for text in ('Snagit', 'Camtasia', 'GotoMeeting'):
vars[text] = IntVar()
buttons[text] = Checkbutton(text=text, variable=vars[text])
buttons[text].pack()
app.mainloop()
checks = [var.get() for var in vars.values()]
通过使用dict
和tuple
来消除重复。这不像一些仅使用生成器的解决方案那样性感,但是没有理由在这里做到这一点,我认为这更具可读性。
答案 3 :(得分:2)
累积变量并内联创建按钮:
variables = []
for text in ['Snagit', 'Camtasia', 'Gotomeeting']:
variable = IntVar()
Checkbutton(text=text, variable=variable).pack()
variables.append(variable)
app.mainloop()
checks = [variable.get() for variable in variables]
答案 4 :(得分:0)
vars = [IntVar() for i in xrange(3)]
buttons = [Checkbutton(text="Snagit", variable=vars[0]),Checkbutton(text="Camtasia", variable=vars[1]),Checkbutton(text="GotoMeeting", variable=vars[2])]
for c in buttons:
c.pack()
app.mainloop()
check1,check2,check3 = [v.get() for v in vars]
我不知道这是不是Pythonic,但我觉得它有点清洁。