Я пытаюсь написать для своих учеников что-то вроде мини-игры на Jupyter, где они, как на игровых площадках Swift, изучают, как ведет себя фигурка при применении разных команд. Я написал следующее:
from ipywidgets import Image
from ipycanvas import *
import time
char = Image.from_file("Bilder/charRight.png")
bg = Image.from_file("Bilder/map.png")
xchar=150
ychar=170
tilesize = 48
canvas = Canvas(height=800, width=800)
canvas.draw_image(bg,0,0 )
canvas.draw_image(char, xchar, ychar)
def step():
time.sleep(3)
global xchar
global ychar
global char
canvas.draw_image(bg,0,0 )
xchar = xchar+tilesize
canvas.draw_image(char, xchar, ychar)
step()
print("yay")
step()
print("yay")
canvas
Но я не понимаю, почему не показывает каждый шаг отдельно, а все в конце? Если вы хотите предложить другие модули, среда, которую я хотел бы использовать, может работать только с модулями, написанными на Python. В противном случае я бы попробовал pygame.
я пытался включить холст в нескольких местах, думая, что это заставит его рисовать, но не сделал этого.





Я думаю, что это работает в полном ядре Python, поскольку оно не ждет конца, чтобы что-либо показать, и перемещает изображение char. (Сеанс со значком «связующего запуска» здесь.) Я думаю, что отчасти проблема в том, что вы неправильно используете display() Jupyter или ipywidgets для обработки вывода. Первая из них является основной проблемой: холст не отображался до тех пор, пока в вашем блоке кода не встретилась последняя строка кода. Мое предложение ниже:
from ipywidgets import Image
from ipycanvas import *
import time
char = Image.from_file("single_document_mode_in_JupyterLab.png")
bg = Image.from_file("ClassicNb_interface.png")
xchar=150
ychar=170
tilesize = 48
canvas = Canvas(height=800, width=800)
canvas.draw_image(bg,0,0 )
canvas.draw_image(char, xchar, ychar)
display(canvas)
def step():
time.sleep(3)
canvas.clear()
global xchar
global ychar
global char
canvas.draw_image(bg,0,0 )
xchar = xchar+tilesize
canvas.draw_image(char, xchar, ychar)
step()
print("yay")
step()
print("yay")
Я также добавил шаг «очистки». Может быть, это не то, чего вы хотели?
Что касается print(), я оставил его в покое, потому что не был уверен, почему вы его используете. Я думаю, вы, вероятно, просто использовали его в качестве монитора, и вам было все равно, куда именно он печатает? На самом деле вам не нужно просто print(), если вы хотите, чтобы текст располагался где-то рядом с холстом. И чтобы правильно использовать его с ipywidgets, вам, вероятно, захочется использовать его в диспетчере контекста. Не стесняйтесь обновлять, если вы хотите, чтобы с print("yay") было сделано что-то по-другому в отношении того, где он находится относительно изображений и области вывода.
Упс, я думал, что уже давно ответил... извините. Большое спасибо, это очень помогло, теперь все работает. Вот только работает он не плавно, то есть рисунок "дергается", простите, английский не мой родной язык. есть ли возможность переместить или удалить только те изображения, которые необходимо переместить?
Вы пытались отрегулировать время задержки и исключить четкий шаг? Или изменить их порядок? Я недостаточно знаю об этом, чтобы знать, можно ли сделать это более плавным. В противном случае другой пакет может быть более гладким.
«Если вы хотите предложить другие модули, среда, которую я хотел бы использовать, может работать только с модулями, написанными на Python». Вероятно, это поможет другим тестировать то, что может сработать, чтобы быть ясным в том, что вы подразумеваете под этим. Вы имеете в виду, что используете JupyterLite? Пиодидное ядро?