Python 3.x tkinter按钮文本未更改
我将tkinter与Python3一起使用。我的按钮应该在单击时更改其文本。它等待用户单击按钮,然后按钮命令方法完成,但文本从未更改。当用户单击按钮时,如何更改按钮的文本 ***编辑 ***显示了一个最小的工作示例Python 3.x tkinter按钮文本未更改,python-3.x,tkinter,Python 3.x,Tkinter,我将tkinter与Python3一起使用。我的按钮应该在单击时更改其文本。它等待用户单击按钮,然后按钮命令方法完成,但文本从未更改。当用户单击按钮时,如何更改按钮的文本 ***编辑 ***显示了一个最小的工作示例 import tkinter as tk import tkinter.simpledialog import random ai_turn = None def gui(): root = tk.Tk() var = tk.BooleanVar(value=Fa
import tkinter as tk
import tkinter.simpledialog
import random
ai_turn = None
def gui():
root = tk.Tk()
var = tk.BooleanVar(value=False)
b1 = tk.Button(text=' ', width=15, height=6, command=lambda: action(b1,ai_turn,buttons_available,var))
b2 = tk.Button(text=' ', width=15, height=6, command=lambda: action(b2,ai_turn,buttons_available,var))
b3 = tk.Button(text=' ', width=15, height=6, command=lambda: action(b3,ai_turn,buttons_available,var))
b4 = tk.Button(text=' ', width=15, height=6, command=lambda: action(b4,ai_turn,buttons_available,var))
b5 = tk.Button(text=' ', width=15, height=6, command=lambda: action(b5,ai_turn,buttons_available,var))
b6 = tk.Button(text=' ', width=15, height=6, command=lambda: action(b6,ai_turn,buttons_available,var))
b7 = tk.Button(text=' ', width=15, height=6, command=lambda: action(b7,ai_turn,buttons_available,var))
b8 = tk.Button(text=' ', width=15, height=6, command=lambda: action(b8,ai_turn,buttons_available,var))
b9 = tk.Button(text=' ', width=15, height=6, command=lambda: action(b9,ai_turn,buttons_available,var))
buttons_available = [b1, b2, b3, b4, b5, b6, b7, b8, b9]
b1.grid(row=0, column=0)
b2.grid(row=0, column=1)
b3.grid(row=0, column=2)
b4.grid(row=1, column=0)
b5.grid(row=1, column=1)
b6.grid(row=1, column=2)
b7.grid(row=2, column=0)
b8.grid(row=2, column=1)
b9.grid(row=2, column=2)
menubar = tk.Menu(root)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label='Play', command=lambda: play(buttons_available, root, var))
filemenu.add_command(label='Exit', command=root.quit)
menubar.add_cascade(label='File', menu=filemenu)
root.config(menu=menubar)
root.geometry("345x303")
root.title('Go to File > Play to start a game')
root.mainloop()
def action(buttons, ai_turn, buttons_available, var):
if ai_turn is not None:
if ai_turn == True:
buttons.config(text='X')
buttons.config(state='disabled')
elif ai_turn == False:
buttons.config(text='O')
buttons.config(state='disabled')
buttons_available.remove(buttons)
var.set(True)
def play(buttons_available, root, var):
turn_count = []
remaining_boxes = 9
correct_guess = random.choice([0,1])
player_guess = tkinter.simpledialog.askinteger('Who will go first?', 'Choose a number (1 or 0)',
minvalue=0, maxvalue=1)
if player_guess == correct_guess:
tk.messagebox.showinfo('Correct!', 'You will move first, but I will be X')
ai_turn = False
root.wait_variable(var)
turn_count = [human_move(remaining_boxes, ai_turn)]
else:
tk.messagebox.showinfo('Incorrect: Number was {}'.format(correct_guess),
'I will go first, and I will be X')
ai_turn = True
turn_count = [ai_move(buttons_available, remaining_boxes, ai_turn)]
while turn_count[0][1] > 0:
if turn_count[0][0] == False:
root.wait_variable(var)
turn_count=human_move(remaining_boxes, ai_turn)
elif turn_count[0][0] == True:
turn_count=ai_move(buttons_available, remaining_boxes, ai_turn)
def human_move(remaining_boxes, ai_turn):
remaining_boxes -= 1
ai_turn = True
return ai_turn, remaining_boxes
def ai_move(buttons_available, remaining_boxes, ai_turn):
if remaining_boxes == 9: #AI moves first and places X in top left corner
buttons_available[0].config(text='X', state='disabled')
else:
pass
remaining_boxes -= 1
ai_turn = False
return ai_turn, remaining_boxes
gui()
我在这个TicTacToe(猜测)中看到的唯一问题是,程序执行从未进入处理按钮配置的代码块。这可能是因为您没有相应地定义
ai\u turn
值。还要注意,在函数human_move()
中,语句ai_turn=True
,只有在调用函数时才会执行,我认为您不是。此外,尝试提供一个新的解决方案。