Как показать диалоговую панель с индикатором выполнения в Python

Я работаю над плагином Rhythmbox и мне нужно показать диалоговую панель с индикатором выполнения. Вот мой код:

def download_all_lyrics_action_callback(self, action):
        progressbar = Gtk.ProgressBar();

        dialog = Gtk.Dialog(_('lLyrics Preferences'), self.shell.get_property('window'),
                Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (Gtk.STOCK_OK, Gtk.ResponseType.OK))

        content_area = dialog.get_content_area()
        content_area.pack_start(progressbar, True, True, 0)

        dialog.show_all()

        dialog.run()

        total = len(self.shell.props.library_source.props.query_model)
        i = 1;
        for row in self.shell.props.library_source.props.query_model:
            entry = row[0]
            title = entry.get_string(RB.RhythmDBPropType.TITLE)
            artist = entry.get_string(RB.RhythmDBPropType.ARTIST)
            print(title + " - " + artist)

            self.get_lyrics_for_song(title, artist)
            progressbar.set_fraction(i/total) 
        dialog.hide()

Проблема в том, что он останавливается в dialog.run() инструкция. Я также протестировал код, который нашел, но безуспешно. Можете ли вы помочь мне исправить это?

1 ответ

Решение

dialog.run() запускает основной цикл, который выполняется до тех пор, пока пользователь не закроет диалоговое окно или не нажмет одну из его кнопок ответа. За то, что вы хотите, было бы лучше позвонить dialog.show() вместо.

Убедитесь, что вы запускаете основной цикл (while Gtk.events_pending(): Gtk.main_iteration(False)) после каждого звонка менять индикатор выполнения; или обновить индикатор выполнения в режиме ожидания. В противном случае вы не увидите изменений.

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