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

PySide中QDialog显示文本编辑框时可缩放、隐藏时固定尺寸的实现问题

解决方案

你之前只修改了布局的尺寸约束,没有同步调整QDialog本身的窗口尺寸限制属性和窗口标志,所以缩放行为没有变化。只需要对showMore方法做如下修改,再补充初始化状态的配置即可实现需求:

核心修改点

  1. 切换文本编辑框显隐时,同步调整QDialog的固定尺寸设置
  2. 同步调整窗口标志,控制最大化按钮是否可用,匹配当前缩放状态
  3. 修改窗口标志后需要主动调用show()让配置生效

修改后的showMore方法

def showMore(self):
    lineTextHidden = not self.lineEdit.isHidden()
    self.lineEdit.setHidden(lineTextHidden)
    if lineTextHidden:
        # 隐藏文本框,固定窗口大小
        self.layout().setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
        self.setFixedSize(self.minimumSizeHint())
        # 禁用最大化按钮
        self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowMaximizeButtonHint)
    else:
        # 显示文本框,允许调整大小
        self.layout().setSizeConstraint(QtWidgets.QLayout.SetNoConstraint)
        # 放开尺寸限制,16777215是Qt默认的最大窗口尺寸值
        self.setMinimumSize(0, 0)
        self.setMaximumSize(16777215, 16777215)
        # 启用最大化按钮
        self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowMaximizeButtonHint)
    # 修改窗口标志后需要调用show让配置生效
    self.show()
    QtCore.QTimer.singleShot(0, self.resizeMe)

补充初始化配置

在__init__方法的末尾添加如下代码,匹配初始状态下文本框隐藏、窗口不可调整的需求:

# 初始化默认禁用最大化按钮
self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowMaximizeButtonHint)
self.show()

修改完成后测试效果:点击More按钮显示文本编辑框时,窗口支持拖拽调整大小、可最大化;再次点击隐藏文本编辑框时,窗口自动收缩到固定尺寸,无法调整大小。

内容的提问来源于stack exchange,提问作者Matteo Boscolo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:39:04