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)
我正在尝试在 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)