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

时间:2019-06-09 20:29:44

标签: python python-3.x tkinter

因此,我不会相对于其旧位置移动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())

1 个答案:

答案 0 :(得分:0)

您可能应该使用画布和画布上的图像,而不要使用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()