2

Pythonとtkinterを使用して、多くのチェックボックス(約40個)を動的に作成するアプリがあり、それらの前にすべてのチェックボックスをチェックできる別のアプリを追加したいと思います

この例は電子メールです...大量の電子メールを削除する場合は、[すべて選択] チェックボックスをオンにします。

私の質問は、この機能を Python GUI アプリに追加するにはどうすればよいかということです。関係していると思うchk_btn.config(state="")が定かではない

ありとあらゆる助けに感謝します!

4

3 に答える 3

2

チェックボックスを動的に作成することは、通常は悪い考えです。ボタンを見失うなどの問題が発生する可能性があります。ただし、私が書いたこのミニスクリプトは、あなたが望むことを行う方法を示すはずです:

from Tkinter import *

root = Tk()

# Create a dictionary where the keys are the checkbuttons
# and the values are their BooleanVars
buttons = dict()
for _ in xrange(10):
    buttons[Checkbutton(root)] = BooleanVar()

for button in buttons:
    # Place each button on the window
    button.grid()
    # Hook each button up to its BooleanVar
    button.config(variable=buttons[button])
    # Set each BooleanVar to True
    buttons[button].set(True)

# I printed this just to show what is going on
print buttons

root.mainloop()

ボタンを見失うのを防いでくれるのは、ボタンとその BooleanVar を格納するために作成した辞書です。ボタンまたはその変数にアクセスする場合は、その辞書で見つけることができます。

于 2013-07-24T14:57:50.413 に答える
1

興味のある人のために-私が与えられた答えを無視して(おっと)、これを使用しました:

from tkinter import *
root = Tk()
frame = Frame(root).grid()

class state:
    def read_states():
        arry = list(map(lambda var: var.get(), states))
        for n in range(len(arry)):
            print(arry[n])
        print('----')
    def change_states(x):
        for n in range(len(folder1)):
            x[n].set(1)
    def clear_states():
        for n in range(len(states)):
            states[n].set(0)
states = []
bgs = []
folder1 = []
folder2 = []
folder_break = []
for n in range(10):
    var = IntVar()
    chk = Checkbutton(frame, text=n+1, variable=var)
    chk.grid(row=n+3)
    if n < 5:
        folder1.append(var)
    else:
        folder2.append(var)
    states.append(var)


btn_2 = Button(frame, text='Change', command=lambda w=folder1: state.change_states(w))
btn_2.grid(row=1)
btn_3 = Button(frame, text='Change2', command=lambda w=folder2: state.change_states(w))
btn_3.grid(row=1, column=1)
btn_4 = Button(frame, text='Clear', command=state.clear_states)
btn_4.grid(row=2)
btn = Button(frame, text='GO', command=state.read_states)
btn.grid(row=0)

root.mainloop()

これにより、より多くの自由と制御が得られ、最初の回答に触発されました.

ありがとうございます:)

于 2013-08-27T12:51:55.953 に答える