2

そのため、チェックボックスのグループを作成しようとしています(追加のチェックボックスを追加する可能性が非常に高いため、実際にはクラスとして作成する必要があります)。

これまでのところ私はこれを持っていますが、これはコードを繰り返すので、あまり効率的ではありません。どのようにしてコードをよりエレガントにすることができますか?

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

5 に答える 5

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]
于 2012-05-22T19:58:38.963 に答える
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]
于 2012-05-22T19:54:55.083 に答える
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()]

dictsとsを使用するtupleことにより、繰り返しを排除します。これは、ジェネレーターのみを使用する一部のソリューションほどセクシーではありませんが、ここでそれを行う理由はなく、これはかなり読みやすいと思います。

于 2012-05-22T20:01:58.633 に答える
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]
于 2012-05-22T20:02:15.703 に答える
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かどうかはわかりませんが、少しクリーンだと思います。

于 2012-05-22T19:59:18.653 に答える