Tkinter运行井字棋报错_tkinter.TclError: unknown option "-1" 如何解决?
报错原因分析
你遇到的_tkinter.TclError: unknown option "-X"报错核心来自两个逻辑错误:
- 第一:按钮属性访问语法错误。Tkinter 按钮控件的类字典取值语法仅用于访问控件的官方配置属性(比如
text、width等),你写的b[str(r)][str(c)] = playerA相当于尝试访问按钮不存在的0/1/2配置项,Tkinter 解析时会自动给配置名前加-前缀,因此点击第几行就会报对应-行号的未知选项错误。 - 第二:全局变量
b仅指向最后创建的按钮。你在循环中每次给b赋新创建的按钮对象,循环结束后b永远是最后生成的第三行最后一列的按钮,即使语法正确,也没法修改你点击的对应按钮的文本。
修复方案
你原本声明的board列表仅存储了无意义的数字,没有实际存储按钮对象,修改思路是把所有生成的按钮存入board,点击时通过传入的行号、列号取出对应按钮修改文本即可。
修复后可正常运行的代码如下:
from tkinter import * root = Tk() frame = Frame(root) frame.pack() playerA = 'X' playerB = 'O' def change_button_value_after_click(r, c): # 从board列表取出对应位置的按钮 target_btn = board[r][c] if target_btn['text'] == "": # 修改按钮的text属性为玩家标识 target_btn['text'] = playerA else: print("This button was clicked!") # board改为存储按钮对象的二维列表 board = [] for row in range(3): row_btns = [] for col in range(3): b = Button(frame, text="", width=5, command=lambda r=row,c=col:change_button_value_after_click(r,c)) b.grid(row=row, column=col) row_btns.append(b) board.append(row_btns) root.mainloop()
内容的提问来源于stack exchange,提问作者stack_user
相关产品推荐
相关产品推荐

