Как правильно прикрепить файл .PNG к кнопке TKINTER? - PullRequest
0 голосов
/ 22 апреля 2020

Я занимаюсь игрой на линкоре и функцией ниже, которая выполняется для создания новой кнопки с изображением взрыва в качестве фона. Я использую Ma c & python 3.7

global redraw_gameboard
global Player
global AI_player    

script_dir = os.path.dirname(__file__)
rel_path = "explode.png"

image = ImageTk.PhotoImage(file=os.path.join(script_dir, rel_path))

new_button = Button(redraw_gameboard, 
                    height = 2, 
                    width = 4, 
                    command= already_shot,
                    image=image)

new_button.grid(row = row, column = column)

Вот что выходит:

image

1 Ответ

0 голосов
/ 22 апреля 2020

Я не уверен, что вы ожидаете, так как я не знаю, как выглядит изображение "explode.png". Кроме того, при задании вопросов по stackoverflow, пожалуйста, всегда старайтесь публиковать минимальный воспроизводимый пример .

Однако, как я понимаю, проблема, вероятно, связана с тем, что изображение больше, чем кнопка, и оно обрезается. Затем в ваших кнопках отображается только верхняя левая часть изображения.

Предлагаемое решение: (Вам нужно будет установить пакет подушек, если это еще не сделано)

import os
from PIL import Image, ImageTk
import tkinter

# Sizes in pixels
BUTTON_HEIGHT = 40
BUTTON_WIDTH = 40

root = tkinter.Tk()

script_dir = os.path.dirname(__file__)
rel_path = "explode.png"

image = Image.open(os.path.join(script_dir, rel_path))
image = image.resize((BUTTON_WIDTH,BUTTON_HEIGHT))
imtk = ImageTk.PhotoImage(image)

# Using a void image for other buttons so that the size is given in pixels too
void_imtk = tkinter.PhotoImage(width=BUTTON_WIDTH, height=BUTTON_HEIGHT)


def create_button(row, column, im):
    new_button = tkinter.Button(root,
                                height = BUTTON_HEIGHT,
                                width = BUTTON_WIDTH,
                                image=im)
    new_button.grid(row = row, column = column)


create_button(0,0, imtk)
create_button(0,1, void_imtk)
create_button(1,0, void_imtk)
create_button(1,1, imtk)


root.mainloop()

Конечно, вы захотите внести некоторые изменения в вашу программу, например, используя архитектуру вашего виджета.

...