pyqt5代码里有主窗口和子窗口,使子窗口移动位置时,主窗口也移动位置
时间: 2024-12-17 10:53:24 浏览: 2
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
5星 · 资源好评率100%
在PyQt5中,如果你想要实现当子窗口移动时,主窗口也随之移动,这通常涉及到窗体管理的概念以及信号槽(Signal-Slot)机制。主窗口需要保持对子窗口的位置信息,并在子窗口位置变化时更新自身的位置。这里是一个简单的例子:
首先,在主窗口(MainWindow)中,你需要定义一个属性来保存子窗口(SubWindow)的位置,例如`self.subWindowPos`。然后,在处理子窗口位置改变的事件时,如`QMoveEvent`,你可以更新主窗口的位置。
```python
import sys
from PyQt5.QtWidgets import QMainWindow, QWidget, QPushButton, QVBoxLayout, QSplitter, QLabel
from PyQt5.QtCore import Qt
class SubWindow(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.positionChanged.connect(self.parent_move)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建子窗口
self.subWindow = SubWindow()
self.subWindowPos = QPoint() # 初始化子窗口位置
# 当子窗口位置发生变化时,更新主窗口位置
self.subWindow.positionChanged.connect(lambda pos: self.move_to_subwindow(pos))
layout = QVBoxLayout()
layout.addWidget(self.subWindow)
widget = QWidget()
widget.setLayout(layout)
splitter = QSplitter(Qt.Horizontal)
splitter.addWidget(widget)
self.setCentralWidget(splitter)
def move_to_subwindow(self, pos):
self.move(self.pos() + pos - self.subWindowPos)
self.subWindowPos = pos
if __name__ == "__main__":
app = QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec_())
```
在这个示例中,当你在子窗口上拖动时,会触发`positionChanged`信号,连接到的槽函数`parent_move`会更新主窗口的位置。注意,为了简化演示,这里的`parent_move`函数直接将`pos`传递给`move_to_subwindow`,在实际应用中,你可能需要根据具体需求调整这个逻辑。
阅读全文