我正在使用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()
指令中停止了。我还测试了一些我发现但没有成功的代码。你能帮我解决这个问题吗?
答案 0 :(得分:1)
dialog.run()
启动一个主循环,直到用户关闭对话框或按下其中一个响应按钮为止。根据您的需要,最好拨打dialog.show()
。
确保在每次调用后运行主循环(while Gtk.events_pending(): Gtk.main_iteration(False)
)以更改进度条;或者在空闲功能中更新进度条。否则你不会看到变化。