QGIS双停靠面板与地图画布指定布局及尺寸固定方法咨询
QGIS停靠面板布局解决方案
1. 先垂直拆分再水平拆分地图画布的实现流程
直接两次调用addDockWidget会导致右侧面板拆分整个窗口(包含顶部面板区域),要实现顶部面板+下方地图画布+右侧面板的嵌套布局,需结合QMainWindow.splitDockWidget精准拆分区域,修改代码如下:
from PyQt5.QtWidgets import QMainWindow from PyQt5.QtCore import Qt def show_dock(self) -> None: # 初始化两个停靠面板 if not self.dock_widget: self.dock_widget = Dock1(self.iface) if not self.dock_widget2: self.dock_widget2 = Dock2(self.iface) # 第一步:添加顶部垂直拆分面板 self.iface.addDockWidget(Qt.TopDockWidgetArea, self.dock_widget) # 第二步:添加右侧面板并仅拆分地图画布所在的中心区域 self.iface.addDockWidget(Qt.RightDockWidgetArea, self.dock_widget2) # 获取主窗口中心部件(地图画布的父容器) central_widget = self.iface.mainWindow().centralWidget() # 对中心部件和右侧面板执行水平拆分,确保仅影响下方区域 self.iface.mainWindow().splitDockWidget(central_widget, self.dock_widget2, Qt.Horizontal) # 强制指定右侧面板的区域,避免布局错乱 self.iface.mainWindow().setDockWidgetArea(self.dock_widget2, Qt.RightDockWidgetArea)
核心逻辑:先固定顶部面板的垂直拆分,再针对地图画布所在的中心区域单独做水平拆分,避免右侧面板影响顶部区域。
2. 固定水平尺寸为屏幕分辨率的2/3
通过获取屏幕分辨率计算目标宽度,再调整面板或拆分比例实现,推荐两种方式:
方式一:固定右侧面板宽度(间接让地图画布占2/3)
from PyQt5.QtCore import QTimer from PyQt5.QtGui import QGuiApplication # 获取主屏幕分辨率 screen = QGuiApplication.primaryScreen() screen_width = screen.geometry().width() # 计算右侧面板宽度(屏幕的1/3) dock2_target_width = int(screen_width * 1 / 3) # 延迟设置宽度,确保布局渲染完成后生效 QTimer.singleShot(100, lambda: self.dock_widget2.setFixedWidth(dock2_target_width))
方式二:调整拆分比例(直接控制地图画布占比)
from PyQt5.QtCore import QTimer from PyQt5.QtGui import QGuiApplication screen = QGuiApplication.primaryScreen() screen_width = screen.geometry().width() dock2_target_width = int(screen_width * 1 / 3) # 调整右侧面板宽度,让地图画布自动占剩余2/3区域 QTimer.singleShot(100, lambda: self.iface.mainWindow().resizeDocks([self.dock_widget2], [dock2_target_width], Qt.Horizontal))
使用QTimer.singleShot是为了等待QGIS界面布局渲染完成后再调整,避免设置无效。
内容的提问来源于stack exchange,提问作者afernandezody
相关产品推荐
相关产品推荐

