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

如何在PyQt中实现鼠标拖拽调整Widget大小?

PyQt6实现控件拖拽调整大小

Widget拖拽调整大小示例

我们常能在各类软件里拖拽调整Widget的大小,上图就是这类功能的示例。我写了一段包含两个按钮的简单代码,想让这两个按钮支持鼠标拖拽调整大小,但网上搜了一圈没找到可行方案:

import sys
from PyQt6.QtWidgets import QWidget, QApplication, QHBoxLayout, QPushButton


app = QApplication(sys.argv)

class Window(QWidget):
    def __init__(self) -> None:
        super().__init__()

        #LayoutSet
        layout = QHBoxLayout()
        self.setLayout(layout)


        #Add buttons
        layout.addWidget(QPushButton("ok"))
        layout.addWidget(QPushButton("cancel"))




w = Window()
w.show()
sys.exit(app.exec())

解决方法

用PyQt6的QSplitter就能实现这个需求,它是专门用来创建可拖拽调整的控件布局的组件。修改后的代码如下:

import sys
from PyQt6.QtWidgets import QWidget, QApplication, QHBoxLayout, QPushButton, QSplitter


app = QApplication(sys.argv)

class Window(QWidget):
    def __init__(self) -> None:
        super().__init__()

        # 创建水平方向的QSplitter
        splitter = QSplitter()
        # 向splitter添加按钮
        splitter.addWidget(QPushButton("ok"))
        splitter.addWidget(QPushButton("cancel"))
        
        # 将splitter放入主窗口布局
        layout = QHBoxLayout()
        layout.addWidget(splitter)
        self.setLayout(layout)

        # 设置两个按钮的初始拉伸比例为1:1,窗口缩放时按比例调整
        splitter.setStretchFactor(0, 1)
        splitter.setStretchFactor(1, 1)


w = Window()
w.show()
sys.exit(app.exec())

功能说明

  • QSplitter会在两个按钮之间生成可拖拽的分隔条,拖动分隔条就能实时调整两个按钮的宽度。
  • setStretchFactor方法用于设置控件的拉伸权重,确保窗口大小改变时,两个按钮按设定比例分配空间。

内容的提问来源于stack exchange,提问作者Amin Khormaei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:55:19