2014-09-21 1 views
0

Я пытаюсь написать сценарий Gtk, чтобы уведомить пользователя (в корневом каталоге), потому что у меня проблемы с python-notify в корне. Итак, я написал этот код:python gtk window.show() за пределами __init__

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import pygtk 
pygtk.require('2.0') 
import gtk 
import gtk.gdk 
import time 

class Time: 

    def auto(self, Time, donnees=None): 

     print "Show the window" 
     self.window.show() 
     time.sleep(10) 
     print "Hide the window" 
     self.window.hide() 

    def __init__(self): 

     color = "#000" 
     positionX = 1560 
     positionY = 35 

     # Création fenetre principale 
     self.window = gtk.Window(gtk.WINDOW_POPUP) 

     # Position de la fenetre principale 
     self.window.move(positionX+100, positionY) 
     self.window.set_default_size(250, 80) 
     self.window.set_position(gtk.WIN_POS_NONE) 
     self.window.set_position(gtk.WIN_POS_CENTER_ON_PARENT) 

     # Couleur de la fenetre 
     map = self.window.get_colormap() 
     colour = map.alloc_color(color) 
     style = self.window.get_style().copy() 
     style.bg[gtk.STATE_NORMAL] = colour 
     self.window.set_style(style) 

     #self.window.show() 

     self.auto(self, Time) 

def main(): 
     gtk.main() 
     return 0 

if __name__ == "__main__": 
     Time() 
     main() 

Проблема в том, что я не могу показать или скрыть окно, когда я хочу. Когда я вызываю self.auto (self, Time) в init, окно не отображается. Должен ли я использовать другой поток?

Благодаря

ответ

0

Вы должны заменить вашу time.sleep(10) с:

then = time.time() 
while then + 10 > time.time(): 
    while gtk.events_pending(): 
     gtk.main_iteration() 
    time.sleep(0.1) 

, чтобы основной пробег цикла, когда вы спите.

+1

Другой вариант - использовать 'gobject.timeout_add (10000, lambda: self.window.hide())', который позволит основному циклу запускаться без иконов 0.1s. Вложенные основные петли имеют тенденцию привлекать ошибки. – user4815162342

+0

Пожалуйста, не используйте функции sleep() и gtk.main_iteration(). Это будет просто для плохой интерактивности приложений. Просто использование 'gobject.timeout_add (10000, self.window.hide)' должно работать (нет необходимости в лямбда). –

Смежные вопросы