Clutter не обновляет экран за пределами точек останова
-
22-07-2019 - |
Вопрос
У меня есть кое-какой код:
l1 = clutter.Label()
l1.set_position(100,100)
for i in range(0,10):
l1.set_text(str(i))
time.sleep(1)
Это предназначено для отображения количества от 1 до 10 секунд на экране в беспорядке, но я получаю странную ошибку.Когда я запускаю скрипт обычно, экран работает так, как и должен, но текст не отображается, пока не истечет 10 секунд.Однако, когда я запускаю с точками останова в pdb, текст отображается просто отлично.
Я также получаю странную ошибку при запуске программы:
do_wait: drmWaitVBlank returned -1, IRQs don't seem to be working correctly.
Try adjusting the vlank_mode configuration parameter.
Но я не понимаю, почему это повлияло бы на код вне точек останова, но не в точках останова.
Мы были бы очень признательны за любую помощь.
Решение
Не уверен, что вы уже нашли ответ на этот вопрос, но:
Причина, по которой у вас возникла эта проблема, заключается в том, что вы блокируете основной поток (где происходит все рисование) своими вызовами time.sleep(), не позволяя библиотеке перерисовывать экран.
Например.ваш код в данный момент делает это:
- Беспорядок перерисовывает экран.
- Вы зацикливаетесь на десяти секундах и меняете текст десять раз.
- Беспорядок перерисовывает экран.
Если вы хотите поставить что-то в очередь по таймеру, вам следует заглянуть в объект gobject.timeout_add.
Другие советы
Вы пытались опубликовать (или поиск ) в списке рассылки Clutter? Вот тот, кто получил то же сообщение о drmWaitVBlank, например. р>
Я предполагаю, что большинство людей на SO не знакомы с решением проблем Clutter. Я знаю, что я не :)