Рисование линий над кнопками в tkinter - PullRequest
0 голосов
/ 15 февраля 2019

Я разрабатываю игру 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 = [[]]

Это функция, которая создает кнопки вcanvas:

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?

1 Ответ

0 голосов
/ 15 февраля 2019

Нельзя рисовать объекты холста поверх виджетов, которые были созданы на холсте или которые были добавлены поверх холста с помощью pack, place или grid.

Из канонической документации tcl / tk по элементам окна :

Примечание: из-за ограничений в способах управления окнами невозможнонарисуйте другие графические элементы (например, линии и изображения) поверх элементов окна.Элемент окна всегда скрывает любую графику, которая перекрывает его, независимо от их порядка в списке отображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...