Я знаю, что это очень старый вопрос, но у меня была такая же проблема с Gtk + 3, и использование Gtk.events_pending() не имело никакого эффекта, поэтому я выбрал другой маршрут.
В принципе, я просто надел кнопку, чтобы вручную очистить заставку, которую я видел в большом количестве коммерческих приложений. Затем я вызываю window.present() на заставку после создания главного окна, чтобы сохранить заставку спереди. Кажется, это всего лишь пауза, Gtk + 3 должна фактически показывать содержимое заставки до, показывая главное окно, открывающееся за ним.
class splashScreen():
def __init__(self):
#I happen to be using Glade
self.gladefile = "VideoDatabase.glade"
self.builder = Gtk.Builder()
self.builder.add_from_file(self.gladefile)
self.builder.connect_signals(self)
self.window = self.builder.get_object("splashscreen")
#I give my splashscreen an "OK" button
#This is not an uncommon UI approach
self.button = self.builder.get_object("button")
#Button cannot be clicked at first
self.button.set_sensitive(False)
#Clicking the button will destroy the window
self.button.connect("clicked", self.clear)
self.window.show_all()
#Also tried putting this here to no avail
while Gtk.events_pending():
Gtk.main_iteration()
def clear(self, widget):
self.window.destroy()
class mainWindow():
def __init__(self, splash):
self.splash = splash
#Tons of slow initialization steps
#That take several seconds
#Finally, make the splashscreen OK button clickable
#You could probably call splash.window.destroy() here too
self.splash.button.set_sensitive(True)
if __name__ == "__main__":
splScr = splashScreen()
#Leaving this here, has no noticeable effect
while Gtk.events_pending():
Gtk.main_iteration()
#I pass the splashscreen as an argument to my main window
main = mainWindow(splScr)
#And make the splashscreen present to make sure it is in front
#otherwise it gets hidden
splScr.window.present()
Gtk.main()
Это не работает для меня ни. Действительно, уже есть «пока gtk.events_pending ...» сразу после инициализации splashscreen (в основной функции). Я работаю над Gnome, но попробовал его на рабочем столе xfce, и там он работает ... –
Я не говорю о том, что в главной функции (поскольку этот, похоже, ничего не делает на моем компьютере), я Я говорю о добавлении одного сразу после 'self.window.show_all()' в 'splashScreen'. Ты сделал это? И это все еще не работает? Если так ... странно. – dumbmatter
Извините, я, должно быть, сделал это неправильно. Теперь это работает :-). Большое спасибо –