python - 如何创建 tkinter 背景图像?

标签 python canvas tkinter

我需要在带有背景(楼层 map )图像的 Canvas 上绘制一个移动的球。 我成功加载图像并绘制移动的球,但 Canvas 球没有放置在背景之上。

import Tkinter as tk
import random
import time
from PIL import ImageTk, Image

root = tk.Tk()
root.resizable(width=False, height=False)
root.wm_attributes("-topmost", 1)
path = 'C:\xx\Pictures\xxx.jpg'
img = Image.open(path)
photo = ImageTk.PhotoImage(img)

class Ball:
    def __init__(self, canvas, color):
        self.canvas = canvas
        self.id = canvas.create_oval(10, 10, 25, 25, fill=color)
        self.canvas.move(self.id, 245, 100)

    def draw(self):
        self.canvas.move(self.id, 1, 1)
        self.canvas.after(50, self.draw)


canvas = tk.Canvas(root,  bd=0, highlightthickness=0)
canvas.pack()
background_label = tk.Label(root, image = photo)
background_label.place(x=0, y=0, relwidth=1.0, relheight=1.0, anchor="center")
background_label.pack( )

ball = Ball(canvas, "red")
ball.draw()  #Changed per Bryan Oakley's comment.
root.mainloop()

最佳答案

您将图像加载到位于绘制球的 Canvas 下方的标签中。您必须将图像加载到同一个 Canvas 中。

替换这个

background_label = tk.Label(root, image = photo)
background_label.place(x=0, y=0, relwidth=1.0, relheight=1.0, anchor="center")
background_label.pack( )

这样:

canvas.create_image(0, 0, image=photo)

确保在创建球之前创建图像,以获得正确的 z 顺序。

关于python - 如何创建 tkinter 背景图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41794551/

相关文章:

javascript - HTML5 Canvas Javascript 如何制作平滑的笔刷

python - Tkinter radiobutton IntVar 属性错误

java - 如何将 Android View 渲染到 Canvas 而不先渲染它(即没有完整布局)

Python 文件未关闭

python - 使用 nargs 参数时,如何使 argparse.ArgumentParser 返回元组或 np.array 而不是列表?

python - 如何使用实例激活 __str__ dunder 方法并修复错误 :"__str__ returned non-string (type NoneType)"

javascript - 获取对象 HTMLImageElement 而不是 base64 字符串

Python TKinter 多项操作

python - 根据组合框 1 填充组合框 2

python - 我可以指定 pandas 的容器从我的数据框中切割为列吗?