PySide中QDialog显示文本编辑框时可缩放、隐藏时固定尺寸的实现问题
解决方案
你之前只修改了布局的尺寸约束,没有同步调整QDialog本身的窗口尺寸限制属性和窗口标志,所以缩放行为没有变化。只需要对showMore方法做如下修改,再补充初始化状态的配置即可实现需求:
核心修改点
- 切换文本编辑框显隐时,同步调整QDialog的固定尺寸设置
- 同步调整窗口标志,控制最大化按钮是否可用,匹配当前缩放状态
- 修改窗口标志后需要主动调用
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
相关产品推荐
相关产品推荐

