I'm working on Rhythmbox plugin and I need to show a dialog pane with a progress bar. Here's my code :

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()

The problem is it stop in dialog.run() instruction. I have also tested some code I found but without success. Can you please help me to fix this?

有帮助吗?

解决方案

dialog.run() starts a main loop which runs until the user has closed the dialog or pressed one of its response buttons. For what you want, it would be better to call dialog.show() instead.

Make sure you run the main loop (while Gtk.events_pending(): Gtk.main_iteration(False)) after each call to change the progress bar; or update the progress bar in an idle function. Otherwise you won't see the changes.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top