![](/img/trans.png)
[英]Tkinter, how to get/return value by clicking a button in for-loop?
[英]Class for tkinter Button- how to return its value?
我嘗試創建一個類來產生一批按鈕(4)。 我希望在按下每個按鈕時獲得它們的統計信息-當我按下每個按鈕時,僅返回最后一個按鈕的狀態(4)
status
更改是為了在不按下按鈕的情況下更改按鈕的狀態(模擬按鈕按下的自動過程)
我究竟做錯了什么?
class dev_buttons2(object):
def __init__(self,master,buts_list):
self.status=[]
for i in range(len(buts_list)):
self.var = IntVar()
self.name=buts_list[i]
self.c = Checkbutton(master,text=buts_list[i], variable=self.var,
indicatoron=0,command=self.cb,width=10,height=2)
self.c.grid(column=i, padx=5,row = 10)
self.status.append(self.var)
def cb(self):
#device_chage_state(devices_headers.index(self.name),self.status[i].get() )
print(self.status[0].get())
pass
def stat():
return self.status
通過搜索答案,可以使用lambda
。 使用它可以傳遞參數,這很好 ,但是我需要傳遞兩個argumetns ,而lambda`不能做到這一點。
我使用的一種解決方法是使用lambda
函數cp
將參數buts_list[i]
(按鈕的名稱)和var
(按鈕的開/關值)作為列表傳遞,以將參數分隔回change_device_state
函數中的2個參數。
class dev_buttons2(object):
def __init__(self,master,buts_list):
self.status=[]
self.buts=[]
for i in range(len(buts_list)):
var = StringVar()
c = Checkbutton(master,text=buts_list[i], variable=var,
indicatoron=0,command=lambda arg=[buts_list[i],var]:
self.cb(arg),width=10,height=2,onvalue="on",offvalue="off")
c.grid(column=i, padx=5,row = 10)
var.set("off")
self.status.append(var)
self.buts.append(c)
def cb(self,but):
device_chage_state(devices_headers.index(but[0]),but[1].get())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.