#python #tkinter
Вопрос:
Я пытаюсь разместить кнопки на шахматной доске, причем доска представляет собой изображение, но кнопки «дама», «король» и «слон» не отображаются. Как бы я это исправил?
from tkinter import *
from PIL import Image, ImageTk
root = Tk()
root.geometry("1200x1200")
img = Image.open("s8XND.png")
resized = img.resize((1200, 900), Image.ANTIALIAS)
chessboard = ImageTk.PhotoImage(resized)
canvas = Canvas(root, width = 1200, height = 900)
canvas.place( relheight = 1, relwidth = 1)
canvas.create_image(0, 0, image = chessboard, anchor = "new")
label = Label(root, bg = chessboard)
label.place(pady = 10, padx = 20)
#Black Rook
blackRook = Button(root, text = "Castle", fg = "white", bg = "black")
blackRook.grid(row = 1, column = 0)
#Black Knight
blackHorse = Button(root, text = "Horse", fg = "white", bg = "black")
blackHorse.grid(row = 1, column = 1)
#Black Bishop
blackBishop = Button(root, text = "Bishop", fg = "white", bg = "black")
blackHorse.grid(row = 1, column = 2)
#Black Queen
blackQueen= Button(root, text = "Queen", fg = "white", bg = "black")
blackQueen.grid(row = 1, column = 3)
#Black King
blackKing= Button(root, text = "King", fg = "white", bg = "black")
blackQueen.grid(row = 1, column = 4)
root.mainloop()
Комментарии:
1. Ваш код не может быть выполнен из-за ошибок:
_tkinter.TclError: bad anchor position "new"
. Также вы забыли позвонитьblackBishop.grid(...)
иblackKing.grid(...)
.2. Вы хотите разместить изображение шахматной доски внутри холста или на этикетке? Потому что в данный момент вы делаете и то, и другое. Я подозреваю, что вам следует использовать здесь только холст и
create_image
рисовать значки фигур на шахматной доске, а не кнопки. Затем вы можете определить, на какой фрагмент был нажат, используя метод canvas.find_closest
, чтобы определить, на какой значок был нажат.
Ответ №1:
Этот код работает для меня. Обратите внимание, что я удалил метку и исправил несколько ошибок в вашем коде:
from tkinter import *
from PIL import Image, ImageTk
root = Tk()
root.geometry("1200x1200")
img = Image.open("s8XND.png")
resized = img.resize((1200, 900), Image.ANTIALIAS)
chessboard = ImageTk.PhotoImage(resized)
canvas = Canvas(root, width=1200, height=900)
canvas.place(relheight=1, relwidth=1)
canvas.create_image(0, 0, image=chessboard, anchor="nw")
# Black Rook
blackRook = Button(root, text="Castle", fg="white", bg="black")
blackRook.grid(row=1, column=0)
# Black Knight
blackHorse = Button(root, text="Horse", fg="white", bg="black")
blackHorse.grid(row=1, column=1)
# Black Bishop
blackBishop = Button(root, text="Bishop", fg="white", bg="black")
blackBishop.grid(row=1, column=2)
# Black Queen
blackQueen = Button(root, text="Queen", fg="white", bg="black")
blackQueen.grid(row=1, column=3)
# Black King
blackKing = Button(root, text="King", fg="white", bg="black")
blackKing.grid(row=1, column=4)
root.mainloop()
Также обратите внимание, что вы допустили некоторые ошибки при копировании blackHorse
и вставке blackKing
.
Комментарии:
1. Использование
anchor="ne"
incanvas.create_image(...)
сделает изображение невидимым. Используйтеanchor="nw"
вместо этого.2. Пропустил это. Исправил это. Спасибо.
3. Большое спасибо. Действительно ценю это