тк события тратятся? - PullRequest
       1

тк события тратятся?

3 голосов
/ 18 августа 2011

Как вы обновляете графический интерфейс tk, выполняя некоторые вычисления внутри подпрограммы обратного вызова кнопки?

Процедура занимает много времени, и пользователь хочет увидеть некоторый прогресс.

Нужен какой-нибудь способ перекрасить экран / поискать кнопку отмены.

в GTK это так:

/* computation going on */
...
    while (gtk_events_pending ())
      gtk_main_iteration ();
...
/* computation continued */

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Эквивалентом этого фрагмента кода GTK является метод update (любого виджета).Внутренне, он в значительной степени делает то же самое (т. Е. Обрабатывает события до тех пор, пока больше нечего делать, но не ждет, пока что-нибудь придет после этого).возможность повторных звонков на ваши обратные вызовы;если событие происходит дважды в быстрой последовательности (что очень легко происходит в коде GUI), то возможно в конечном итоге запустить вещи внутри себя.Вы можете сойти с рук большую часть времени, но слишком легко попасть в беду.Хорошим выходом из этого является введение какой-либо блокировки (например, отключение кнопки во время обработки ее команды, что также является хорошей визуальной метафорой).

1 голос
/ 18 августа 2011

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

TkButton.new :text => 'Hard routine',
             :command => proc { Thread.new { hard_routine } }.pack
Tk.mainloop

выполнение тяжелых вещей в вашем обратном вызове считается плохой практикой, поскольку оно блокирует всецикл событий, так что ваш графический интерфейс зависает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...