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

如何在PySide6的QDockWidget中添加滚动条并修复停靠问题

解决QDockWidget滚动条适配及停靠失效问题

问题分析

  • 滚动条缺失:内部组件My_wgt未使用滚动容器,内容超出窗口高度时无法滚动。
  • 停靠功能异常:给内部组件设置setFixedWidth(250)限制了QDockWidget的宽度调整,setFloating(False)固定了dock的浮动状态,导致交互受限。

解决方案

  1. 添加滚动条:将My_wgt放入QScrollArea中,QScrollArea会自动根据内容和窗口大小显示滚动条。
  2. 修复停靠功能:移除内部组件的固定宽度设置,若需固定dock宽度,直接设置QDockWidget的最小/最大宽度;按需调整setFloating的设置(允许浮动可去掉该设置或设为True)。

修改后的代码

import sys
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *

class My_wgt(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        layout = QVBoxLayout()
        lineedit_list = [QLabel(f"Line {i}") for i in range(30)]

        for label in lineedit_list:
            layout.addWidget(label)

        # 让布局内组件在窗口缩小时合理收缩
        layout.addStretch()
        self.setLayout(layout)


class My_wnd(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setFixedHeight(500)

        self.dock = QDockWidget("Dock")
        # 若需要允许dock浮动,可注释掉下面这行或设为True
        # self.dock.setFloating(False)

        # 创建滚动容器包裹内部组件
        scroll_area = QScrollArea()
        self.dock_in_wgt = My_wgt()
        scroll_area.setWidget(self.dock_in_wgt)
        # 允许滚动区域内的组件随容器大小调整
        scroll_area.setWidgetResizable(True)

        self.dock.setWidget(scroll_area)
        self.dock.setAllowedAreas(Qt.RightDockWidgetArea)
        # 设置dock最小宽度,替代原内部组件的固定宽度限制
        self.dock.setMinimumWidth(250)
        self.addDockWidget(Qt.RightDockWidgetArea, self.dock)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_window = My_wnd()
    main_window.show()
    sys.exit(app.exec())

关键修改说明

  • 用QScrollArea包裹自定义组件并启用setWidgetResizable(True),确保内容超出时自动显示滚动条,且组件能随容器大小调整。
  • 将内部组件的固定宽度改为设置QDockWidget的最小宽度,既保留基础宽度限制,又不影响dock的停靠调整功能。
  • 若需要dock支持浮动,移除self.dock.setFloating(False)即可。

内容的提问来源于stack exchange,提问作者May Walon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:52:47