如何在Python中显示带有进度条的对话框窗格

时间:2014-03-27 16:52:34

标签: python gtk pygtk rhythmbox

我正在使用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 个答案:

答案 0 :(得分:1)

dialog.run()启动一个主循环,直到用户关闭对话框或按下其中一个响应按钮为止。根据您的需要,最好拨打dialog.show()

确保在每次调用后运行主循环(while Gtk.events_pending(): Gtk.main_iteration(False))以更改进度条;或者在空闲功能中更新进度条。否则你不会看到变化。