2016-05-17 3 views
0

Итак, вот сделка ... У меня есть окно с 1 "AA". Я нажимаю кнопку, я получаю еще одно окно «BB» рядом с ним, используя ...PyQT Прикрепите/перетащите одно окно с другим окном PyQT ... - той же программой

a = str(self.geometry()) 
    a= a.strip("PyQt4.QtCore.QRect(").strip(")").replace(" ","").split(",") 
    UI.setGeometry(int(a[0])+520,int(a[1]),700,900) 

Теперь в новом окне «BB» Я хотел бы, чтобы нажать флажок, что бы сказать «Ссылка на главную„“окно» А.А. (Я могу реализовать, что просто нужна функция/сигнал, чтобы получить информацию о перетаскивании мыши/окна ...). Это означает, что когда я перемещаю главное окно «АА» слева на 100 пикселей, я бы хотел, чтобы мое новое окно «ВВ» тоже двигалось налево ... Может ли кто-нибудь помочь мне с этим? Я считаю, что мне нужен сигнал с мыши/движения мыши не уверен, что я потерял здесь: -. (

Надежда это сделать какой-то смысл
Дариуш

Edit1 Далее вниз по линии, мне удалось слишком получить некоторые шнуры с помощью:.

def mousePressEvent(self, QMouseEvent): 
    print QMouseEvent.pos() 

def mouseReleaseEvent(self, QMouseEvent): 
    cursor =QtGui.QCursor() 
    print cursor.pos() 

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

+0

Это какая-то безнадежная, хакерская, струнная обработка, которую вы там начали. –

+0

Да, это было давно, нужно пересмотреть его, сделайте это правильно, я думаю ... все еще изучаю: -) – Dariusz

ответ

1

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

В принципе, вам просто нужно переопределить moveEvent вашего главного окна. Обычно это вызывается, когда пользователь заканчивает движение окна. Затем вы можете решить, какие суб-окна нужно переместить.

Кроме того, я добавил гораздо лучший способ дублирования геометрии окна, который не требует суперструн-взлома.

import sys 
import time 

from PyQt4 import QtCore, QtGui 



class MyWindow(QtGui.QMainWindow): 

    def __init__(self): 
     super(MyWindow, self).__init__() 
     self.ui_lay = QtGui.QVBoxLayout() 
     self.ui_widget = QtGui.QWidget(self) 
     self.setCentralWidget(self.ui_widget) 
     self.ui_widget.setLayout(self.ui_lay) 
     self.ui_btn = QtGui.QPushButton('Create Window', self) 
     self.ui_lay.addWidget(self.ui_btn) 
     self.ui_btn.clicked.connect(self.create_window) 
     self.other_window = None 

    def create_window(self): 
     self.other_window = QtGui.QMainWindow(self) 
     self.other_widget = QtGui.QWidget(self.other_window) 
     self.other_window.setCentralWidget(self.other_widget) 
     self.other_lay = QtGui.QVBoxLayout() 
     self.other_widget.setLayout(self.other_lay) 
     self.ui_chk = QtGui.QCheckBox('Link', self.other_window) 
     self.other_lay.addWidget(self.ui_chk) 
     self.other_window.show() 
     self.position_other_window() 

    def position_other_window(self): 
     geo = self.geometry() 
     geo.moveLeft(geo.left() + geo.width() + 10) 
     self.other_window.setGeometry(geo) 


    def moveEvent(self, event): 
     super(MyWindow, self).moveEvent(event) 
     print 'HERE', time.time() 
     if self.other_window and self.ui_chk.isChecked(): 
      #self.position_other_window() 
      diff = event.pos() - event.oldPos() 
      geo = self.other_window.geometry() 
      geo.moveTopLeft(geo.topLeft() + diff) 
      self.other_window.setGeometry(geo) 



if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    window = MyWindow() 
    window.show() 
    app.exec_() 
+0

Омг был сигнал moveEvent! Ahhh хватит! Я знал, что копаю слишком глубоко с сигналом mousePressEvent, и я должен искать что-то еще. В любом случае, спасибо! Это делает именно то, что я хочу! – Dariusz

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