是否可以防止在 QMdiArea 中创建的窗口从窗口向下或侧向? 就像那里的阻塞一样,要把它向上取出。 目前,可以拉出QMdiArea的整个窗口。
编辑: 是否可以检测到窗户碰撞?
不一定是为了防止它重叠,而是以某种方式被另一个窗口吸引。
import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets
class MainWindow(QtWidgets.QMainWindow):
count = 0
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.mdi = QMdiArea()
self.setCentralWidget(self.mdi)
bar = self.menuBar()
file = bar.addMenu("Subwindow")
file.addAction("window1")
file.addAction("text1")
file.addAction("text2")
file.triggered[QAction].connect(self.click)
self.setWindowTitle("Multiple window using MDI")
def click(self, q):
print("New sub window")
if q.text() == "window1":
MainWindow.count = MainWindow.count + 1
sub = QMdiSubWindow()
sub.setWidget(QTextEdit())
sub.setWindowTitle("subwindow" + str(MainWindow.count))
self.mdi.addSubWindow(sub)
sub.show()
if q.text() == "text1":
self.mdi.cascadeSubWindows()
if q.text() == "text2":
self.mdi.tileSubWindows()
def main():
app = QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
您可以在QMdiSubWindow
上截取moveEvent
,并根据QMdiArea
的大小检查窗口的位置。 如果超出边界,请将窗口移回边界。
一个只检查右边界的示例(您可以从那里轻松实现其余部分(-
class SubWindow(QtWidgets.QMdiSubWindow):
def __init__(self, parent=None):
super().__init__(parent)
def moveEvent(self, event):
pos = event.pos()
right = pos.x() + self.width()
area = self.mdiArea()
if right > area.width():
self.move(area.width() - self.width(), pos.y())
return