Как я могу переместить ярлык Tkinter относительно его старой позиции? - PullRequest
0 голосов
/ 09 июня 2019

Так что я не хочу перемещать Label (я не могу использовать Canvas, поскольку я показываю картинку) относительно его старой позиции.

Я пытался просто использовать bg.place(y-1), но Python сказал мне, что он не знает y. Я пытался получить координаты метки, но python сказал мне, что Label s не имеют этого атрибута.

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 голосов
/ 10 июня 2019

Вы, вероятно, должны использовать холст и изображение на холсте вместо Label, менеджера геометрии place и изображения на этикетке ...

Примерно так:
-> прямоугольник заменяет изображение, но вы можете легко заменить его.
-> Я рекомендую использовать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...