如何写这个“Python”

时间:2012-05-22 19:44:45

标签: python tkinter

所以我试着写一组复选框(我实际应该把它写成一个类,因为我们很可能会添加其他复选框)

到目前为止,我已经得到了这个,但这会重复代码,因此效率不高。在哪些方面我可以使代码更优雅?

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()

5 个答案:

答案 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()]

通过使用dicttuple来消除重复。这不像一些仅使用生成器的解决方案那样性感,但是没有理由在这里做到这一点,我认为这更具可读性。

答案 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,但我觉得它有点清洁。