我尝试访问/更改在循环中创建的按钮的按钮属性。
我的想法是将按钮收集在列表中,以便我可以访问每个按钮。有更好的方法吗?
此刻,我尝试使用按钮命令更改单击按钮的文本。在“动作”功能中,当我尝试运行代码时,得到错误代码“列表索引超出范围!”?
由于我是python和tkinter的新手,所以到目前为止,数小时之内无法找到成功的解决方案。 每个想法都将不胜感激。
我使用了完全相同的代码而不创建列表。该代码有效,但是当我单击一个按钮时,只有最后创建的按钮更改了文本。难道是我必须使用“ StringVar”功能或“ textvariable”吗?
import tkinter as tk
window = tk.Tk()
window.geometry("300x150")
window.title("Tic Tac Toe")
def action(i):
btns[i].configure(text = 'X')
btn_nr = -1
btns = []
for x in range(1,4):
for y in range(1,4):
btn_nr += 1
print(btn_nr)
btns.append(tk.Button(text='-', command = action(int(btn_nr))))
btns[int(btn_nr)].grid(row=x, column=y)
exit_button = tk.Button(text='Exit Game', command=window.destroy)
exit_button.grid(row=4, column=1, columnspan=15)
window.mainloop()
答案 0 :(得分:0)
您快到了。请参见下面的问题已解决,因为您需要一个lambda来将btn_nr传递给函数action
。顺便说一句,不需要int()
import tkinter as tk
window = tk.Tk()
window.geometry("300x150")
window.title("Tic Tac Toe")
def action(button):
if btns[button].cget('text') == '-':
btns[button].configure(text='X')
else:
btns[button].configure(text='-')
btn_nr = -1
btns = []
for x in range(1, 4):
for y in range(1, 4):
btn_nr += 1
print(btn_nr)
btns.append(tk.Button(text='-', command=lambda x=btn_nr: action(x)))
btns[btn_nr].grid(row=x, column=y)
exit_button = tk.Button(text='Exit Game', command=window.destroy)
exit_button.grid(row=4, column=1, columnspan=15)
window.mainloop()
我稍微改变了action
函数,使其在'X'和'-'之间切换。