有什么办法可以在tkinter画布的按钮上显示图像?

时间:2018-11-13 18:41:56

标签: python canvas tkinter

是否可以在tkinter画布中显示图像,以使其显示在同一tkinter画布中创建的按钮上方?我的代码如下所示:

从tkinter导入*

root = Tk()

canvas = Canvas(root, bg="red")
button = Button(canvas, text="Example")
image = PhotoImage(file="image")

canvas.pack()
button.grid(row=0, column=0)
canvas.create_image(0, 0, image=image)

root.mainloop()

但是,这仅显示按钮,而不显示图像。我该如何解决?

注意:该解决方案必须使用Python随附的默认模块(因此没有PIL),因为该程序需要在无法下载其他模块的环境中使用。

1 个答案:

答案 0 :(得分:0)

您可以将图像添加为按钮的一部分(带有imagecompound选项)。您也可以使用place在按钮上放置带有图像的标签。另一种选择是创建一个标签,将图像作为画布项目,只要它在堆叠顺序中高于按钮即可。

但是,您无法创建与小部件重叠的画布对象,因为小部件在画布上始终具有最高的堆叠顺序。

这是canonical tk documentation所说的:

  

出于显示目的,画布中的项目是按顺序排列的,显示列表中的第一个项目首先显示,然后是列表中的下一个项目,依此类推。显示列表中较晚的项目会使显示列表中较早的项目模糊不清,有时被称为在较早项目的“顶部”。创建新项目时,它将放置在显示列表的末尾,在所有其他项目的顶部。窗口小部件命令可用于重新排列显示列表的顺序。

     

窗口项是上述规则的例外。底层窗口系统要求始终将它们绘制在其他项目之上。另外,窗口项目的堆叠顺序不受任何canvas小部件命令的影响;您必须改用提高和降低Tk命令。

相关问题