你可以设置一个tkinter背景图像而不添加新的canvas元素吗?

时间:2017-07-25 17:52:56

标签: python tkinter tkinter-canvas

我将Python tkinter程序简化为

import tkinter as tk

root = tk.Tk()
canvas = tk.Canvas(root, height=200, width=200, bg="salmon")
canvas.pack(fill=tk.BOTH, expand=tk.YES)

def click(event):
    print(event.x)
    print(event.y)

def release(event):
    print(event.x)
    print(event.y)

canvas.bind("<Button-1>", click)
canvas.bind("<ButtonRelease-1>", release)

root.mainloop()

以Canvas作为主要元素。 Canvas具有绑定到它的点击/释放事件(例如,返回event.xevent.y)。我想以这种方式向画布添加背景图像:

canvas = tk.Canvas(root, bg='/path/to/image.png')

我已设法通过使用canvas.create_image方法在画布上创建图像来设置背景图像,如Adding a background image in python中所述。但是,这会导致我的计划失败,因为event.xevent.y会返回背景图片的位置。

我正在寻找一种能够让我改变现有代码的最小解决方案。

2 个答案:

答案 0 :(得分:1)

在画布上创建背景图像的唯一方法是在画布上创建图像对象。这样做不会影响示例中绑定函数返回的坐标。

答案 1 :(得分:0)

我们需要使用PhotoImage加载图片以供使用,然后我们使用create_image将该图像设置为画布。

试一试:

import tkinter as tk

root = tk.Tk()
canvas = tk.Canvas(root, height=200, width=200, bg="salmon")
canvas.pack(fill=tk.BOTH, expand=tk.YES)

def click(event):
    print(event.x)
    print(event.y)

def release(event):
    print(event.x)
    print(event.y)

canvas.bind("<Button-1>", click)
canvas.bind("<ButtonRelease-1>", release)

my_image = tk.PhotoImage(file='/path/to/image.png')
canvas.create_image(10, 10, image=my_image, anchor='nw')

root.mainloop()