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
相关产品推荐
相关产品推荐

