Задать вопрос
@NightCAT_Busya
pycatdranigbus

Объекты Canvas Tkinter Python?

Код:
from tkinter import*
from PIL import ImageTk, Image
from tkinter import Canvas
import random
import time
root=Tk()
root.geometry("700x700")
canvas=Canvas()
canvas.pack(fill=BOTH, expand=1)
def rect():
    x=random.randint(10, 690)
    y=random.randint(10, 100)
    x2=random.randint(60, 290)
    y2=random.randint(60, 200)
    canvas.create_rectangle(
        x, y, x2, y2,
        outline="#f11", fill="red", width=5
    )
    for meow in range(100000):
        canvas.move(1, 0, 1)
        time.sleep(0.01)
        canvas.update()
 
def istr():   
    i=PhotoImage(file='C:\Python\\istrebitel.gif')
    i=i.subsample(3, 3)
    canvas.create_image(200, 200, anchor=NW, image=i)
    
    def movetriangle(event):
        if event.keysym=='Up':
            canvas.move(1, 0, -7)
        elif event.keysym=='Down':
            canvas.move(1, 0, 7)
        elif event.keysym=='Left':
            canvas.move(1, -7, 0)
        elif event.keysym=='Right':
            canvas.move(1, 7, 0)
    canvas.bind_all('<KeyPress-Up>', movetriangle)
    canvas.bind_all('<KeyPress-Down>', movetriangle)
    canvas.bind_all('<KeyPress-Left>', movetriangle)
    canvas.bind_all('<KeyPress-Right>', movetriangle)
    canvas.mainloop()

istr()
rect()

Если запустить этот код, то тогда можно будет управлять вторым объектом, но красный прямоугольник пропадет.
А мне нужно, чтобы красный прямоугольник падал вниз, но чтобы при этом можно было управлять вторым объектом (istrebitel.gif)
Как это сделать?
  • Вопрос задан
  • 265 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
yupiter7575
@yupiter7575
Python программист
Пока включен главный цикл окна, все байнды будут срабатывать. Этот цикл своими функциями вы редактировать не можете. Тогда на помощь приходить метод - window.update(). В итоге у вас получается типа такого:
canvas.bind(...)
canvas.bind(...)
while play:
    root.update()

Отрисовку предметов нужно делать до цикла,
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы