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

PyQt5实现QDockWidget仅在指定Frame内移动与调整

如何限制QDockWidget仅在指定QFrame内移动和调整大小?

我正在使用PyQt5开发应用,希望创建一个可在Frame内任意移动、调整大小的部件。参考相关方案后打算用QDockWidget,但需要限制它仅在主窗口的指定Frame内存在并移动。尝试setAllowedAreas()方法时,发现该方法仅支持Qt默认的DockWidgetArea枚举值,无法传入自定义Frame,多次尝试自定义区域均报错,求解决方法。

当前代码

#!/usr/local/bin/pydm

from PyQt5.QtWidgets import QDockWidget 

from pydm import Display

class Window(Display):     ##Main window class.
    def __init__(self, args, macros):
        super(Window, self).__init__(None, args, macros, 
            ui_filename="main.ui")

        self.pushButton.clicked.connect(self.createDock)

    def createDock(self):
        self.dock=QDockWidget()
        self.dock.raise_()
        self.dock.show()

说明:pydm是继承PyQt所有类的模块,可正常使用默认功能;main.ui为QtDesigner创建的带Frame和PushButton的部件窗口。

报错信息

报错1

Traceback (most recent call last):
  File "./main.py", line 16, in createDock
    self.dock.setAllowedAreas(self.frame)
TypeError: setAllowedAreas(self, Union[Qt.DockWidgetAreas, Qt.DockWidgetArea]): argument 1 has unexpected type 'QFrame'

报错2

Traceback (most recent call last):
  File "./main.py", line 17, in createDock

    myArea = Qt.DockWidgetArea(self.frame)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'QFrame'

内容的提问来源于stack exchange,提问作者Marco Montevechi Filho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:01:09