2012-01-29 16 views
5

Użyłem odpowiedzi podanej w PyGTK FAQ, ale to nie działa z PyGObject. Dla Twojej wygody, tutaj jest przypadek testowy, który działa z PyGTK, a następnie przetłumaczona wersja, która nie działa z PyGObject.Jak podnieść okno, które jest zminimalizowane lub pokryte PyGObject?

PyGTK Wersja: wersja

import gtk 

def raise_window(widget, w2): 
    w2.window.show() 

w1 = gtk.Window() 
w1.set_title('Main window') 
w2 = gtk.Window() 
w2.set_title('Other window') 

b = gtk.Button('Move something on top of the other window.\nOr, minimize the' 
       'other window.\nThen, click this button to raise the other' 
       'window to the front') 
b.connect('clicked', raise_window, w2) 

w1.add(b) 

w1.show_all() 
w2.show_all() 

w1.connect('destroy', gtk.main_quit) 
gtk.main() 

PyGObject:

from gi.repository import Gtk 

def raise_window(widget, w2): 
    w2.window.show() 

w1 = Gtk.Window() 
w1.set_title('Main window') 
w2 = Gtk.Window() 
w2.set_title('Other window') 

b = Gtk.Button('Move something on top of the other window.\nOr, minimize the' 
       'other window.\nThen, click this button to raise the other' 
       'window to the front') 
b.connect('clicked', raise_window, w2) 

w1.add(b) 

w1.show_all() 
w2.show_all() 

w1.connect('destroy', Gtk.main_quit) 
Gtk.main() 

Po kliknięciu przycisku w wersji PyGObject, drugie okno nie jest podniesiona, a ja dostać ten błąd:

Traceback (most recent call last): 
    File "test4.py", line 4, in raise_window 
    w2.window.show() 
AttributeError: 'Window' object has no attribute 'window' 

Zgaduję więc, że musi istnieć jakiś inny sposób, aby uzyskać plik Gdk.window w PyGObject?

Czy jest jakiś inny/lepszy sposób osiągnięcia tego samego celu?

Wszelkie pomysły?

Odpowiedz

7

Jak wyjaśniono w tym post, istnieją dwie możliwości:

podnieść okno czasowe (prawdopodobnie co szukasz):

def raise_window(widget, w2): 
    w2.present() 

podnieść okno stałe (lub aż wyraźnie zmienione przez konfiguracja):

def raise_window(widget, w2): 
    w2.set_keep_above(True) 
+0

Niesamowite, to wydaje się jeszcze bardziej poprawne niż to, co robiłem wcześniej. – dumbmatter

1

present nie działa dla mnie za tymczasową podwyżkę, ale to zrobił:

win.set_keep_above(True) 
win.set_keep_above(False) 
Powiązane problemy