Беспорядок не обновляет экран за пределами точек останова

У меня есть код:

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.

Но я не понимаю, почему это повлияет на код из точек останова, но не в точки останова.

Любая помощь будет принята с благодарностью.

2 ответа

Решение

Не уверен, что вы уже нашли ответ на этот вопрос, но:

Причина, по которой вы столкнулись с этой проблемой, заключается в том, что вы блокируете основной поток (где происходит рисование) вызовами time.sleep(), не позволяя библиотеке перерисовывать экран.

Например, ваш код в настоящее время делает это:

  1. Беспорядок перерисовывает экран.
  2. Вы зациклились на десять секунд и изменили текст десять раз.
  3. Беспорядок перерисовывает экран.

Если вы хотите поставить что-то в очередь по таймеру, вы должны заглянуть в gobject.timeout_add.

Вы пробовали публиковать (или искать) в списке рассылки Clutter? Вот кто-то, кто получил такое же сообщение о drmWaitVBlank, например.

Я предполагаю, что большинство людей на SO не знакомы с решением проблем Clutter. Я знаю, что я не :)

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