2012-04-27 9 views
1

У меня возникли проблемы с отображением заставки во время некоторой тяжелой работы в моем приложении в Python-gtk. Я искал в Google и нашел эту ссылку: http://code.activestate.com/recipes/577919-splash-screen-gtk/. Так как пример довольно ясен, я загрузил программу и запускал ее на своем компьютере. Однако заставка не показывала его содержимое. Не может ли быть установлен какой-то параметр конфигурации Gtk? Как сгенерировать код:Заставка не отображает его содержимое

while gtk.events_pending(): 
    gtk.main_iteration() 

сразу после показа заставки не работает в моем случае?

Спасибо за вашу помощь

ответ

2

Я попытался добавить:

 while gtk.events_pending(): 
      gtk.main_iteration() 

сразу после self.window.show_all() в splashScreen, и это сработало. До этого он не отобразил текст: «Это не займет слишком много времени ... :)».

Это работает, потому что это гарантирует, что заставка будет отображаться немедленно, вместо того, чтобы оставлять ее случайно, что, я думаю, должно произвольно работать для некоторых людей (парень, который написал этот код и другого парня, который ответил здесь), а не для других (вы и я).

+0

Это не работает для меня ни. Действительно, уже есть «пока gtk.events_pending ...» сразу после инициализации splashscreen (в основной функции). Я работаю над Gnome, но попробовал его на рабочем столе xfce, и там он работает ... –

+0

Я не говорю о том, что в главной функции (поскольку этот, похоже, ничего не делает на моем компьютере), я Я говорю о добавлении одного сразу после 'self.window.show_all()' в 'splashScreen'. Ты сделал это? И это все еще не работает? Если так ... странно. – dumbmatter

+0

Извините, я, должно быть, сделал это неправильно. Теперь это работает :-). Большое спасибо –

0

Я проверил код в указанной вами ссылке и отобразил компоненты заставки. Но, возможно, оно, похоже, не отображало их для вас, возможно, потому, что для окна с заставкой не задан размер? Я добавил:

self.window.set_size_request(300,300)

в образце кода и достаточно уверен, действительно появляется метка.

+0

Спасибо за ваше время. К сожалению, это не помогает. Он показывает окно, в котором ничего не написано. –

+0

Как насчет «главного окна», которое отображается после всплывающего экрана? Это показывает его содержание? – Wes

0

Я знаю, что это очень старый вопрос, но у меня была такая же проблема с 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() 
Смежные вопросы