是否可以在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),因为该程序需要在无法下载其他模块的环境中使用。
答案 0 :(得分:0)
您可以将图像添加为按钮的一部分(带有image
和compound
选项)。您也可以使用place
在按钮上放置带有图像的标签。另一种选择是创建一个标签,将图像作为画布项目,只要它在堆叠顺序中高于按钮即可。
但是,您无法创建与小部件重叠的画布对象,因为小部件在画布上始终具有最高的堆叠顺序。
这是canonical tk documentation所说的:
出于显示目的,画布中的项目是按顺序排列的,显示列表中的第一个项目首先显示,然后是列表中的下一个项目,依此类推。显示列表中较晚的项目会使显示列表中较早的项目模糊不清,有时被称为在较早项目的“顶部”。创建新项目时,它将放置在显示列表的末尾,在所有其他项目的顶部。窗口小部件命令可用于重新排列显示列表的顺序。
窗口项是上述规则的例外。底层窗口系统要求始终将它们绘制在其他项目之上。另外,窗口项目的堆叠顺序不受任何canvas小部件命令的影响;您必须改用提高和降低Tk命令。