Tkinter复选框点击后无响应,消息框不弹出问题求助
问题根源与修复方案
核心错误:函数对象与布尔值的无效比较
你在checked()函数里写的if button1_clicked==True完全错误——button1_clicked是函数本身,不是函数执行后的返回值。函数对象永远不可能等于布尔值True,所以这两个条件分支永远不会触发,自然弹不出消息框。
另外,按钮点击函数里的return True毫无意义,tkinter的按钮command参数不会接收或保存函数的返回值,这个返回值根本没地方被利用。
修复方案:直接检查按钮状态
最简单的修复方式是直接判断按钮的文本内容——因为点击按钮后你已经把按钮文本改成了'X',所以可以通过读取按钮的text属性来判断哪个按钮被点击了。
修改后的完整代码:
import tkinter as tk from tkinter import messagebox window=tk.Tk() window.title('Tic-Tac-Toe') def button1_clicked(): button1.configure(text='X') def button2_clicked(): button2.configure(text='X') def button3_clicked(): button3.configure(text='X') def button4_clicked(): button4.configure(text='X') def checked(): # 判断正确按钮是否被点击 if button1['text'] == 'X': messagebox.showinfo('Good job!','You just won a tic-tac-toe game that anyone can win.') # 判断错误按钮是否被点击 elif button2['text'] == 'X' or button3['text'] == 'X' or button4['text'] == 'X': messagebox.showinfo('BRUH!','The only best move was obvious.') # 可选:处理未点击任何按钮的情况 else: messagebox.showwarning('Warning','You haven\'t placed any X yet!') t=tk.IntVar() label1=tk.Label(window,text='X') label2=tk.Label(window,text='O') label3=tk.Label(window,text='O') label4=tk.Label(window,text='X') label5=tk.Label(window,text='O') button1=tk.Button(window,text=' ',command=button1_clicked) button2=tk.Button(window,text=' ',command=button2_clicked) button3=tk.Button(window,text=' ',command=button3_clicked) button4=tk.Button(window,text=' ',command=button4_clicked) check=tk.Checkbutton(window,text='I confirm my move.',variable=t,command=checked) label1.grid(row=0,column=0) label2.grid(row=0,column=1) label3.grid(row=0,column=2) label4.grid(row=1,column=0) label5.grid(row=1,column=1) button1.grid(row=2,column=0) button2.grid(row=2,column=2) button3.grid(row=1,column=2) button4.grid(row=2,column=1) check.grid(row=3,column=1) messagebox.showinfo('Instruction','This is a tic-tac-toe game that anyone can win.') messagebox.showinfo('Instruction','Click on an empty cell to put X.') window.mainloop()
修改说明
- 移除了按钮点击函数中无用的
return True语句 - 将
checked()函数的判断逻辑改为读取按钮的text属性,准确识别用户点击的按钮 - 新增了未点击任何按钮时的提示框,提升用户体验
内容的提问来源于stack exchange,提问作者MyNameIs
相关产品推荐
相关产品推荐

