我是新Tkinter嘗試獲取選中的復選按鈕的值。到目前為止,我可以使用回圈Checkbutton來從串列中獲取可用檢查按鈕的串列。如何使用按鈕來檢測哪些檢查按鈕被選中?
這是我到目前為止的代碼(對于這部分):
INGREDIENTS = ['cheese', 'ham', 'pickle', 'mustard', 'lettuce']
text = Text(root, width=40, height=20)
for i in INGREDIENTS:
cb = Checkbutton(text="%s" % i, padx=0, pady=0, bd=0)
text.window_create("end", window=cb)
text.insert("end", "\n")
cb.pack()
我知道我必須使用連接到函式的按鈕才能獲取選中的值,但我想不出一種方法來創建函式并將其連接到復選框串列。
你能幫我嗎?我不能使用 OOP,我的代碼會被毀掉(它已經很長了,我無法重新格式化它)
謝謝你的建議。
uj5u.com熱心網友回復:
這會用勾選的成分填充串列,或者通過使用 0 或 1 清除評論串列成分。結果可能需要是一個全域變數才能有用。這取決于您的其余代碼。
import tkinter as tk
root = tk.Tk()
INGREDIENTS = ['cheese', 'ham', 'pickle', 'mustard', 'lettuce']
txt = tk.Text(root, width=40, height=20)
variables = []
for i in INGREDIENTS:
variables.append( tk.IntVar( value = 0 ) )
cb = tk.Checkbutton( txt, text = i, variable = variables[-1] )
txt.window_create( "end", window=cb )
txt.insert( "end", "\n" )
txt.pack()
def read_ticks():
# result = [( ing, cb.get() ) for ing, cb in zip( INGREDIENTS, variables ) ]
result = [ ing for ing, cb in zip( INGREDIENTS, variables ) if cb.get()>0 ]
print( result )
but = tk.Button( root, text = 'Read', command = read_ticks)
but.pack()
root.mainloop()
uj5u.com熱心網友回復:
試試這個。正如你所說,你不想讓你的代碼變長。我認為這是解決您問題的方法。
僅添加兩行。
INGREDIENTS = ['cheese', 'ham', 'pickle', 'mustard', 'lettuce']
text = Text(root, width=40, height=20)
for i in INGREDIENTS:
var = IntVar()
cb = Checkbutton(text="%s" % i, padx=0, pady=0, bd=0, offvalue=0,onvalue=1,variable=var)
text.window_create("end", window=cb)
text.insert("end", "\n")
cb.bind('<Button-1>',lambda e,var=var,i=i:print(f'{i} is selected') if var.get()==0 else print(f'{i} is unselected'))
cb.pack()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474320.html
上一篇:為什么框架的寬度沒有顯示一次?
