QMdiArea 离开 window
QMdiArea Leaving the window
是否可以防止在QMdiArea中创建的windows从window向下或向旁边跑出?
就像阻塞一样,向上取出。
目前可以拉出整个window QMdiArea。
编辑:
是否可以检测到 window 碰撞?
不一定是为了防止它重叠,而是它以某种方式被另一个吸引了window。
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
的大小检查 window 的位置。如果超出范围,请将 window 移回范围内。
一个仅检查右边界的示例(您可以从那里轻松实现其余部分)-
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
是否可以防止在QMdiArea中创建的windows从window向下或向旁边跑出? 就像阻塞一样,向上取出。 目前可以拉出整个window QMdiArea。
编辑: 是否可以检测到 window 碰撞?
不一定是为了防止它重叠,而是它以某种方式被另一个吸引了window。
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
的大小检查 window 的位置。如果超出范围,请将 window 移回范围内。
一个仅检查右边界的示例(您可以从那里轻松实现其余部分)-
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