我正在开发一个Tic Tac Toe游戏,以便在我的另一个项目中使用它,我在尝试为游戏添加一些最后的触摸时遇到了问题。我的游戏是使用9个按钮制作的,问题是当其中一个玩家获胜时,我不知道如何在按钮上画线。我已经成功地创建了我想要它们的位置,但它们总是在按钮下面绘制,所以无法看到。
我已经尝试在按钮上添加帧,部分工作,但问题是当玩家对角线获胜时不能使用它。
这是我的代码:
root = Tk()
root.title("Tic Tac Toe")
root.geometry("250x250")
root.config(bg="white")
canvas = Canvas(root, height=150, width=150, bg="black", highlightthickness=0)
canvas.place(x=50, y=50)
frames = [[]]
buttons = [[]]
这是在画布中创建按钮的功能:
def generategame():
for m in range(3):
frames.append([])
buttons.append([])
for n in range(3):
frames[m].append(Frame(canvas, width=48, height=48))
frames[m][n].propagate(0)
frames[m][n].place(x=(n*51), y=(m*51))
buttons[m].append(Button(frames[m][n], text="", command=lambda i=m, j=n: turn(i, j)))
buttons[m][n].config(bg="white", bd=0)
buttons[m][n].pack(fill=BOTH, expand=1)
这是检查玩家是否获胜的代码:
def checkwin(winner):
if buttons[0][0]["text"] == buttons[0][1]["text"] == buttons[0][2]["text"] != "":
print(winner + " WINS")
if buttons[1][0]["text"] == buttons[1][1]["text"] == buttons[1][2]["text"] != "":
print(winner + " WINS")
if buttons[2][0]["text"] == buttons[2][1]["text"] == buttons[2][2]["text"] != "":
print(winner + " WINS")
if buttons[0][0]["text"] == buttons[1][0]["text"] == buttons[2][0]["text"] != "":
print(winner + " WINS")
if buttons[0][1]["text"] == buttons[1][1]["text"] == buttons[2][1]["text"] != "":
print(winner + " WINS")
if buttons[0][2]["text"] == buttons[1][2]["text"] == buttons[2][2]["text"] != "":
print(winner + " WINS")
if buttons[0][0]["text"] == buttons[1][1]["text"] == buttons[2][2]["text"] != "":
print(winner + " WINS")
if buttons[0][2]["text"] == buttons[1][1]["text"] == buttons[2][0]["text"] != "":
print(winner + " WINS")
我尝试过做这样的事情,但它在按钮下划线:
if buttons[0][0]["text"] == buttons[0][1]["text"] == buttons[0][2]["text"] != "":
canvas.create_line(0, 25, 150, 25)
print(winner + " WINS")
游戏运行得很完美,但我无法添加这个最后的触摸。我做错了什么或者在tkinter中做不到这个?
您无法在已在画布上创建的小部件上绘制画布对象,也无法在使用pack
,place
或grid
的画布上添加画布对象。
从window items上的规范tcl / tk文档:
注意:由于窗口管理方式的限制,无法在窗口项目的顶部绘制其他图形项目(如线条和图像)。无论显示列表中的顺序如何,窗口项始终会遮盖与其重叠的任何图形。