我有一個 Tkinter GUI,如果單擊按鈕,它的文本將更改為 list 中的相應專案matches。
名單matches和名單buttons尚不清楚。我的代碼看起來像這樣:
#Defining the buttons
buttons = []
for i in range(len(matches)):
buttons.append(Button(my_frame, text = " ",
font = ("Helvetica", 20), height = 1, width = 1,
command = lambda: change(i)))
def change(index):
if buttons[index]['text'] == matches[i]:
buttons[index]['text'] = " "
else:
buttons[index]['text'] = matches[i]
無論我按下哪個按鈕,文本只會更改最后一個按鈕。我該如何解決?
uj5u.com熱心網友回復:
那是因為lambda 的后期系結
為避免這種情況,請使用functools.partial而不是command = lambda: change(i)))
import functools
buttons = []
for i in range(len(matches)):
buttons.append(
Button(
my_frame,
text=" ",
font=("Helvetica", 20),
height=1,
width=1,
command=functools.partial(change, i)
)
)
另一個更簡單的選擇是替換
command = lambda: change(i)))
和
command = lambda i=i: change(i)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/454996.html
