Когда ipycanvas рисует на холсте? Или как заставить?

Я пытаюсь написать для своих учеников что-то вроде мини-игры на 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». Вероятно, это поможет другим тестировать то, что может сработать, чтобы быть ясным в том, что вы подразумеваете под этим. Вы имеете в виду, что используете JupyterLite? Пиодидное ядро?

Wayne 08.04.2024 17:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что это работает в полном ядре 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") было сделано что-то по-другому в отношении того, где он находится относительно изображений и области вывода.

Упс, я думал, что уже давно ответил... извините. Большое спасибо, это очень помогло, теперь все работает. Вот только работает он не плавно, то есть рисунок "дергается", простите, английский не мой родной язык. есть ли возможность переместить или удалить только те изображения, которые необходимо переместить?

Astrina 07.06.2024 11:05

Вы пытались отрегулировать время задержки и исключить четкий шаг? Или изменить их порядок? Я недостаточно знаю об этом, чтобы знать, можно ли сделать это более плавным. В противном случае другой пакет может быть более гладким.

Wayne 07.06.2024 14:08

Другие вопросы по теме

Использование mathplotlib в лаборатории Jupyter приводит к гибели ядра
Сюжетные экспресс-графики не отображаются в блокноте Jupyter репозитория GitHub
Как автоматизировать форматирование кода в VSCode для ноутбуков Jupyter с помощью Black Formatter?
Jupyter не позволяет мне вводить левую квадратную скобку
Ошибка JavaScript Jupyter Notebook при попытке отобразить виджеты
Создание функции, которая принимает две последовательности ДНК, проверяет, имеют ли они одинаковую длину, являются ли они действительными последовательностями и какой тип мутации они имеют
FileNotFoundError: системе не удается найти указанный путь: «D:\\MS Data\\CI Papers\\My Paper\\LungCancerDataset\\Benign_cases»
При использовании блокнота Jupyter в VSCode интерпретатор Python игнорируется
Невозможно создать диаграмму plantuml при попытке использовать «iplantuml» в Jupyter Notebook в vscode
Синтаксическая ошибка при попытке использовать «iplantuml» в Jupyter Notebook