You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 10:35:24