如何相对于其旧位置移动 Tkinter-Label?



所以我不想相对于它的旧位置移动Label(我不能使用Canvas,因为我正在显示图片(。

我试着只使用bg.place(y-1)但Python告诉我,它不知道y。我试图获取标签的坐标,但 python 告诉我Label没有该属性。

from tkinter import *
import keyboard
w=Tk()
bg=Label(w,image=MYPICTURE)
bg.place(x=0,y=0,width=900,height=700)
def backgroundmovement():
    if ingame == True:
        yold=bg.coords(y)
        bg.place(y=yold-1)
keyboard.add_hotkey('w', lambda: backgroundmovement())

您可能应该使用画布和画布上的图像,而不是Labelplace几何管理器和标签上的图像......

像这样:
->矩形替换图像,但您可以轻松替换它。
-> 我建议使用import tkinter as tk以避免命名空间混乱。
-> 不必使用 keyboard,可以改用键绑定生成的tkinter事件,以及tkinter mainloop .

import tkinter as tk

dxdy = {'Up': (0, -1), 'Down': (0, 1), 'Left': (-1, 0), 'Right': (1, 0)}
def backgroundmovement(e):
    try:
        dx, dy = dxdy[e.keysym]
    except KeyError:
        pass
    else:
        canvas.move(gif1, dx, dy)
window = tk.Tk()
canvas = tk.Canvas(window)
canvas.pack()
# gif1 = PhotoImage(file='my_beautiful_background.gif')
# canvas.create_image(50, 10, image=gif1, anchor=NW)
gif1 = canvas.create_rectangle(50, 50, 100, 100, fill='')
window.bind('<Up>', backgroundmovement)
window.bind('<Down>', backgroundmovement)
window.bind('<Left>', backgroundmovement)
window.bind('<Right>', backgroundmovement)
window.mainloop()

最新更新