使用python和tkinter我有一個應用程序動態地創建大量的複選框(大約40),我想添加另一個先於它們的可以檢查所有複選框在Python中檢查所有框的複選框
一個例子是在電子郵件中...當你想刪除大量的電子郵件時,你可以選中'全選'複選框。
我的問題是如何將此功能添加到我的python GUI應用程序。我認爲這是與chk_btn.config(state="")
,但我不知道
任何和所有幫助表示讚賞!
使用python和tkinter我有一個應用程序動態地創建大量的複選框(大約40),我想添加另一個先於它們的可以檢查所有複選框在Python中檢查所有框的複選框
一個例子是在電子郵件中...當你想刪除大量的電子郵件時,你可以選中'全選'複選框。
我的問題是如何將此功能添加到我的python GUI應用程序。我認爲這是與chk_btn.config(state="")
,但我不知道
任何和所有幫助表示讚賞!
動態創建複選框通常是一個壞主意。它可能導致諸如丟失按鈕軌跡等問題。不過,我寫了這個小腳本應該演示如何做你想要的:
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()
什麼失去按鈕的軌道節省了我是我提出來存儲他們和他們的BooleanVars字典。如果你想訪問一個按鈕或它的變量,你可以在該字典中找到它。
任何有興趣 - 無視我得到了答案(哎呦),用這個:
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()
這給了我更多的自由和控制,並通過第一個答案的啓發。再爲該
謝謝:)
這裏是我如何解決它使用checkbutton選擇/取消所有的複選框:
import Tkinter as tk
def select_clear_states():
global Vars, all_states
states = all_states.get()
if states == 0:
for i in range(len(Vars)):
Vars[i].set(0)
if states == 1:
for i in range(len(Vars)):
Vars[i].set(1)
Vars = []
root = tk.Tk()
all_states = tk.IntVar()
select_all = tk.Checkbutton(root, text = "select/deselect all",
variable = all_states, command = select_clear_states)
select_all.grid(row = 0, column = 0, padx = 5, pady = 1)
for n in range(10):
var = tk.IntVar()
Vars.append(var)
checkbox = tk.Checkbutton(root, text = n+1, variable= Vars[n])
checkbox.grid(row = n+1, column = 0, padx = 5, pady = 1)
root.mainloop()
我知道這是不是很乾淨使用全局變量,但我目前懶得進入OOP。
我認爲這裏的關鍵部分是'buttons [button] .set(True)'這是否也改變了分配給檢查按鈕的變量? –
@ DCA-對你的兩個陳述都是肯定的。 'buttons [button]'產生與'button'一致的變量(BooleanVar)。我讓字典的鍵是按鈕實例和值是它們合適的布爾值。 – iCodez