Как в PyGTK перерисовываются части окна, которые затемняются во время длительного вычисления?

#pygtk

#pygtk

Вопрос:

Ниже приведен некоторый элементарный код.

  • Отображается кнопка.
  • Нажатие кнопки запускает цикл.
  • В цикле, если вы закроете кнопку окном, затемненная часть будет беловатой и не будет перерисовываться до окончания цикла.

Как я могу перерисовать кнопку в цикле?

 import gtk

class MyClass:

    def __init__(self):

        window = gtk.Window()
        window.connect("destroy", gtk.main_quit)
        window.set_size_request(200, 50)

        table = gtk.Table()

        # Add a button to the table.
        button = gtk.Button("Button")
        col = 0
        row = 0
        table.attach(button, col, col   1, row, row   1)
        button.connect("clicked", self.clicked_event_handler)

        window.add(table)
        window.show_all()

    def clicked_event_handler(self, button):

        for i in range(10**8):
            pass

if __name__ == "__main__":

    MyClass()
    gtk.main()
  

Ответ №1:

Вы могли бы запустить основную итерацию самостоятельно

 while gtk.events_pending():
    gtk.main_iteration()
  

Ответ №2:

Длительно выполняющаяся задача должна выполняться в потоке вне основного цикла. Смотрите это для примера с PyGTK.