2012-03-30 5 views
0

Ich benutze Python 2.7 mit PyGTK und GTK der entsprechenden Versionen. (>>> import gtk >>> gtk.pygtk_version (2, 24, 0) >>> gtk.gtk_version (2, 24, 8)) Ich schreibe eine Anwendung, wo es ein Hauptfenster gibt und optional (laut Status eines Toggle-Buttons) auch ein Einstellungsfenster daneben.PyGTK bewegt zwei Fenster auf einmal

Ich versuche, die beiden Fenster gleichzeitig zu verschieben (das Einstellungsfenster STICK zum Hauptfenster machen, es mit dem Hauptfenster verschieben). Es funktioniert standardmäßig auf meiner Freunde MacBook (keine Anstrengung meinerseits), aber nicht auf meinem Windows 7-Rechner. Ich habe einen Workaround gefunden, der dazu führt, dass das Einstellungsfenster nach dem Verschieben des Hauptfensters zum Hauptfenster springt - das ist jedoch nicht mein Ziel.

Edit: FYI, das "settings_window" hat die Eltern "main_window", die (ich denke?) Den richtigen Job für Mac OS tun.

Alle Ideen werden sehr geschätzt. Thx, Erthy

+0

Wenn Sie nicht über das Einstellungsfenster wollen separat vom Hauptfenster bewegen, warum Sie nicht nur die Einstellungen in der PUT Hauptfenster? – ptomato

Antwort

2

dieses Beispiel arbeitet (auf Ubuntu):

#!/usr/bin/env python 
#coding:utf8 
""" 
This PyGtk example shows two windows, the master and his dog. 
After master window moves or changes size, the dog window moves to always stay at its right border. 
This example should also account for variable thickness of the window border. 
Public domain, Filip Dominec, 2012 
""" 

import sys, gtk 

class Main: 
    def __init__(self): 
     self.window1 = gtk.Window(); self.window1.set_title("Master") 
     self.window2 = gtk.Window(); self.window2.set_title("Dog") 

     self.window1.connect('configure_event', self.on_window1_configure_event) # move master -> move dog 
     self.window1.connect('destroy', lambda w: gtk.main_quit()) # close master -> end program 

     self.window1.show_all() 
     self.window2.show_all() 

    def on_window1_configure_event(self, *args): 
     print "Window 1 moved!" 
     x, y = self.window1.get_position() 
     sx, sy = self.window1.get_size() 
     tx = self.window1.get_style().xthickness 
     self.window2.move(x+sx+2*tx,y) 

MainInstance = Main()  
gtk.main()     
+0

Funktioniert auch auf Windows 7, erfolgreich implementiert. Mal sehen, was es auf Mac macht. Danke mein Herr! :) – erthy