PyGTK перемещает два окна одновременно - PullRequest
0 голосов
/ 31 марта 2012

Я использую Python 2.7 с PyGTK и GTK соответствующих версий. (>>> import gtk >>> gtk.pygtk_version (2, 24, 0) >>> gtk.gtk_version (2, 24, 8)) Я пишу приложение, в котором есть главное окно и, возможно, (в соответствии с состояние кнопки переключения), а также окно настроек рядом с ним.

Я пытаюсь переместить два окна одновременно (сделайте окно настроек, НАЖМИТЕ на главное окно, переместите его вместе с основным окном). Он работает по умолчанию на моих друзьях MacBook (без усилий с моей стороны), но не на моей машине с Windows 7. Я нашел обходной путь, который заставляет окно настроек перейти к основному ПОСЛЕ того, как перемещение главного окна закончено - но это не то, к чему я стремлюсь.

Редактировать: к вашему сведению, у "settings_window" есть родительский "main_window", который (я полагаю?) Делает правильную работу для Mac OS.

Любые идеи будут с благодарностью. Спасибо, Эрти

1 Ответ

2 голосов
/ 31 марта 2012

этот пример работает (в 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()                 
...