2016-05-17 28 views
0

これは取引です...私は1 "AA"ウィンドウを持っています。 I IがAA、「ウィンドウ 『』メインへのリンクを」言うチェックボックスをクリックしたい新しい「BB」ウィンドウに今...PyQT別のPyQTウィンドウで1つのウィンドウをアタッチ/ドラッグ... - 同じプログラム

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」ウィンドウを取得]ボタンをクリックしてください(私はマウス/ウィンドウドラッグ情報を得るために関数/信号が必要なだけを実装することができます...)。私がメインの「AA」ウィンドウを100ピクセル左に動かすと、新しい「BB」ウィンドウも左に移動してほしいということを意味します。 私は私が私がここに失われてるかわからないマウス/移動クリックで信号が必要であることを信じている: - (

希望これは感覚のいくつかの並べ替えを行う
ダリウス

EDIT1 さらに、私はあまりにも、管理ラインの下。使用して、いくつかのコードを取得する:

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

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

悲しいことに、私はトリッキー...私は/ドラッグすると任意のコードを取得し、ウィンドウを移動したり、私はUI全体でウィンドウまたは単にマウスをドラッグしていた場合に伝える方法を持っていない私は。代わりにフレームシステムをやり直す必要がありますが、痛みは、まだ周りに道があることを望んでいた...

+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

OmgはmoveEvent信号があった!ああスナップありがとう!私はmousePressEventシグナルで深く掘り下げていることを知っていました。私は何か他のものを探すべきです。とりあえずありがとう!これはまさに私が欲しいものです! – Dariusz

関連する問題