在tkinter的按钮画线

问题描述 投票:0回答:1

我正在开发一个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中做不到这个?

python-3.x tkinter
1个回答
0
投票

您无法在已在画布上创建的小部件上绘制画布对象,也无法在使用packplacegrid的画布上添加画布对象。

window items上的规范tcl / tk文档:

注意:由于窗口管理方式的限制,无法在窗口项目的顶部绘制其他图形项目(如线条和图像)。无论显示列表中的顺序如何,窗口项始终会遮盖与其重叠的任何图形。

© www.soinside.com 2019 - 2024. All rights reserved.