Tkinter 无法在按钮上显示图像

Tkinter can't display image on button

我正在尝试在 tkinter 中编写扫雷游戏,到目前为止一切顺利,但不知何故我无法获得图像。我从一个图像开始,我可以配置任何其他参数。 我有一个参考,因为我将它作为 class

的属性
class Tile:
    def __init__(self, x: int, y: int, bomb: bool, mainframe: ttk.Frame) -> None:
        self.pos_x = x
        self.pos_y = y
        self.marked = False
        self.bomb = bomb
        self.mainframe = mainframe

        self.image = PhotoImage()
        self.blank_image = PhotoImage()
        self.flag_image = PhotoImage("Flag.png", width=30, height=30)
        self.bomb_image = "test"

        self.tile = tkinter.Button(self.mainframe, height=30, width=30, image=self.blank_image)
        self.tile.grid(row=self.pos_y, column=self.pos_x)
        self.tile.bind('<Button-1>', self.open)
        self.tile.bind('<Button-3>', self.right)
    
    def open(self, tmp):
        print(f"open {self.pos_x} {self.pos_y}")
        self.tile.config(bg="grey")

    def mark(self):
        self.marked = True
        print("mark")
        self.tile.config(image=self.flag_image)
        
    def unmark(self):
        self.marked = False
        print("mark")
        self.tile.config(image=self.blank_image)

    def right(self, tmp):
        if self.marked:
            self.unmark()
        else:
            self.mark()

open 方法工作正常,因此更改颜色也有效。我还在终端中得到了输出,因此调用了 mark 和 unmark 方法。

您没有正确创建图像。第一个参数是图像的名称,而不是文件的名称。文件名需要分配给 file 选项。

改变这个:

self.flag_image = PhotoImage("Flag.png", width=30, height=30)

为此:

self.flag_image = PhotoImage(file="Flag.png", width=30, height=30)