在一系列说5个Button对象中,我希望第一个单击的Button看到其“ text”参数更新为数字1。然后,当我单击第二个Button时,无论哪个,我都希望它显示2 ,然后是3,直到5。
这是我的尝试,它一直显示1并且不进行迭代。
import tkinter as tk
root = tk.Tk()
root.geometry('300x200')
buttons = []
def callback(num):
buttons[num].config(text=next(iter(range(1, 5))))
for i in range(5):
buttons.append(tk.Button(root, text='?', width=6, height=3, command=lambda x=i: callback(x)))
for j in buttons:
j.pack(side='left')
root.mainloop()
其他信息:使用lambda而不是直接调用它,我可能很难真正理解回调的运行方式,而滥用lambda可能是它无法按预期工作的原因。这也是我第一次使用next()和iter(),并且可能做错了。
您需要将迭代器定义和next()
调用分开,否则每次都将创建一个新的迭代器。
如果您希望它达到5 6
,iter(range(1, 6))
则还需要插入。
尝试这个 :
import tkinter as tk
root = tk.Tk()
root.geometry('300x200')
buttons = []
my_iter = iter(range(1, 6))
def callback(num):
buttons[num].config(text=next(my_iter))
for i in range(5):
buttons.append(tk.Button(root, text='?', width=6, height=3, command=lambda x=i: callback(x)))
for j in buttons:
j.pack(side='left')
root.mainloop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句