python - QMdiArea 离开窗口
问题描述
是否可以防止在 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()
解决方案
您可以拦截moveEvent
onQMdiSubWindow
并检查窗口的位置与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
推荐阅读
- r - 将数据写入excel,标题在标题上方 - R
- pyomo - TypeError:“_SumExpression”对象不可迭代
- android - 使用 GPS 获取纬度和经度为 0,0
- javascript - 在c#中使用javascript调用按钮单击函数
- wordpress - 为 wordpress 自定义帖子类型定义品牌
- ios - 在 Swift 中添加目标 c 文件后,swift 编译器错误“找到了这个候选者”
- angularjs - 在angularjs中提交后清除表单输入字段..?
- django - 当条件满足时重定向到一个页面如果失败则使用基于类的视图中的成功 url 重定向到另一个页面
- aws-sdk-go - DescribeSnapshots 不支持配置中的区域过滤器
- github - Travis CI 构建状态失败。我能做些什么?