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

PyQt问题:隐藏QTextEdit后窗口留空,如何让QTableView自适应

问题解决方法

你的问题出在使用QGridLayout时,即使QTextEdit隐藏,布局仍会为它预留分配好的列空间,导致QTableView无法占满窗口。改用QHBoxLayout来管理右侧文本框和表格的布局,就能实现动态的空间适配。

关键修改点

  • 用垂直布局(QVBoxLayout)承载按钮和内容区域,内容区域用水平布局(QHBoxLayout)放置表格和文本框
  • 确保QTableView的尺寸策略为Expanding,使其能自动填充可用空间
  • 可选为QTextEdit设置固定宽度,避免显示时宽度随意变化

修改后的完整代码

import sys
from PyQt5.QtWidgets import (QApplication, QVBoxLayout, QHBoxLayout, 
                             QMainWindow, QPushButton, QSizePolicy, 
                             QTableView, QTextEdit, QWidget)

class MainWindow(QMainWindow):
    def runBtn(self):
        if self.hdn:
            self.text.show()
            self.hdn = False
        else:
            self.text.hide()
            self.hdn = True
        # 可选:让窗口自动适配控件大小
        self.adjustSize()

    def __init__(self):            
        super().__init__()
        widget = QWidget()
        self.setCentralWidget(widget)
        # 主垂直布局:放按钮 + 内容区域
        self.main_layout = QVBoxLayout(widget)
        self.hdn = True

        # 按钮布局
        self.Btn = QPushButton('Hide/Show')
        self.Btn.clicked.connect(self.runBtn)
        self.main_layout.addWidget(self.Btn)

        # 内容水平布局:放表格和文本框
        self.content_layout = QHBoxLayout()
        self.main_layout.addLayout(self.content_layout)

        # 表格设置
        self.view = QTableView()
        self.view.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.content_layout.addWidget(self.view)

        # 文本框设置
        self.text = QTextEdit()
        self.text.hide()
        # 可选:设置固定宽度,让文本框显示时宽度一致
        self.text.setFixedWidth(200)
        self.content_layout.addWidget(self.text)

app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

原理说明

QHBoxLayout会根据控件的显示状态动态调整空间分配:

  • 当QTextEdit隐藏时,布局会自动将所有可用空间分配给QTableView,使其占满窗口
  • 当QTextEdit显示时,布局会为它分配指定宽度(或自适应宽度),QTableView收缩到剩余空间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:42:56