Можно ли перемещать сам Canvas в модуле tkinter на python?
Уточнение: мне нужно перемещать Canvas, а не объекты находящиеся в нем.
main.py:
from tkinter import *
import keyboard
Game = Tk()
Game['bg'] = 'black'
c = Canvas()
c.place(x = 0, y = 0)
x_c = 0
y_c = 0
speed_c = -10
while True:
if keyboard.is_pressed('left') or keyboard.is_pressed('a'):
x_c += speed_c
c.place(x = x_c, y = y_c)
if keyboard.is_pressed('right') or keyboard.is_pressed('d'):
x_c -= speed_c
c.place(x = x_c, y = y_c)
if keyboard.is_pressed('up') or keyboard.is_pressed('w'):
y_c += speed_c
c.place(x = x_c, y = y_c)
if keyboard.is_pressed('down') or keyboard.is_pressed('s'):
y_c -= speed_c
c.place(x = x_c, y = y_c)
Вроде всё хорошо, но когда в Canvas'е много объектов тормозит...
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
from tkinter import *
import keyboard
root = Tk()
root['bg'] = 'blue'
c = Canvas(root, width=48, heigh=48, bg="white")
c.place(x = 0, y = 0)
img = PhotoImage(file="lena-2.png")
c.create_image(0, 0, anchor=NW, image=img)
x_c = 0
y_c = 0
speed_c = -10
# - while True:
def some_time(): # +++
global x_c, y_c, speed_c, c
if keyboard.is_pressed('left') or keyboard.is_pressed('a'):
x_c += speed_c
c.place(x = x_c, y = y_c)
if keyboard.is_pressed('right') or keyboard.is_pressed('d'):
x_c -= speed_c
c.place(x = x_c, y = y_c)
if keyboard.is_pressed('up') or keyboard.is_pressed('w'):
y_c += speed_c
c.place(x = x_c, y = y_c)
if keyboard.is_pressed('down') or keyboard.is_pressed('s'):
y_c -= speed_c
c.place(x = x_c, y = y_c)
c.after(30, some_time) # +++
some_time() # +++
root.mainloop()
lena-2.png

