簡體   English   中英

循環在字典上制作Tkinter按鈕,在按鈕點擊時發出命令

[英]Looping over a dictionary to make Tkinter buttons, issue with Command on button click

我正在嘗試使用Python和Tkinter制作一個GUI應用程序來使用Philips hue API。 目前我有一個python對象的字典,其中循環為每個對象創建一個按鈕,例如按鈕文本具有項目或燈光名稱。

當我使用命令語句時出現問題。 每個按鈕都有命令功能,其中包含我想在按鈕點擊時調用的功能。

按鈕很好,其中包含正確的文本值,但問題出現在我點擊按鈕,並調用有關該對象的函數(在本例中稱為itemClick)時,它會傳遞應該在該對象上的對象最后一個按鈕,或循環結束時。

我已嘗試在按鈕上使用'bind'功能,但在這種情況下,單擊按鈕的次數是循環經過的次數。


lightsButtonDict = {}
for item in lightlist:
    print(lightlist[item].getName())
    lightsButtonDict[lightlist[item].getName()] = tk.Button(lightsFrame, text=lightlist[item].getName(), command=lambda: itemClick(lightsFrame, 'light', lightlist[item]))
    lightsButtonDict[lightlist[item].getName()].pack()

我聲明command = lambda: itemClick(lightsFrame, 'light', lightslist[item])

按下按鈕后,最后的燈光列表[item]將被傳遞到函數中,而不是循環中的那個,即如果有10個按鈕,並且您單擊第3個,第10個對象將被傳遞到itemClick(對不起,如果這聽起來有點混亂,希望這是可以理解的)

我想傳入與當前循環相關的對象,因此如果單擊第3個按鈕,則傳入第3個對象,依此類推。

TIA。

如果將項目分配給調用中的變量, lambda將在迭代中存儲該項:

lightsButtonDict = {}
for item in lightlist:
    print(lightlist[item].getName())
    lightsButtonDict[lightlist[item].getName()] = tk.Button(lightsFrame, 
    text=lightlist[item].getName(), 
    command = lambda i = lightslist[item]: itemClick(lightsFrame, 'light', i).pack()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM