Python3.8+PyQt5中如何正确设置QTableWidget的尺寸?
QTableWidget尺寸调整解决方案
你的代码存在布局冲突问题,导致表格尺寸无法按预期控制,调整后完全可以实现蓝线标注的大小效果,具体修改如下:
核心问题修正
在createTable方法中调用self.setLayout(self.vbox)是错误的——QMainWindow已经通过setCentralWidget设置了带网格布局的中心部件,重复设置主窗口布局会导致布局混乱,直接移除该行即可。
尺寸控制方案
根据需求选择以下一种方式调整表格大小:
1. 固定尺寸(精准匹配蓝线)
直接给表格设置固定宽高,完全符合标注尺寸:
def createTable(self, pdfsn =[]): self.tableWidget = QTableWidget(self.centralWidget()) self.tableWidget.setColumnCount(3) headers = ["PDF SN", "APPSHEET SN", "IS MATCH"] self.tableWidget.setHorizontalHeaderLabels(headers) # 设置表格固定宽高(替换为蓝线标注的实际数值) self.tableWidget.setFixedSize(320, 200) # 可选:手动设置列宽,让内容布局更合理 self.tableWidget.setColumnWidth(0, 110) self.tableWidget.setColumnWidth(1, 110) self.tableWidget.setColumnWidth(2, 100) self.vbox = QVBoxLayout() self.vbox.addWidget(self.tableWidget) # 移除错误的 self.setLayout(self.vbox)
2. 布局自适应(随窗口调整)
让表格通过布局占据指定区域,同时自动适配窗口大小:
def initUI(self): w = QtWidgets.QWidget() self.setCentralWidget(w) grid = QtWidgets.QGridLayout(w) # ... 其他控件代码不变 ... self.createTable() # 修改表格布局的添加方式,让它跨3列并占据剩余空间 grid.addLayout(self.vbox, 3, 0, 1, 3) # 设置网格布局的行拉伸,让第3行(表格所在行)占据窗口剩余空间 grid.setRowStretch(3, 1) def createTable(self, pdfsn =[]): self.tableWidget = QTableWidget(self.centralWidget()) self.tableWidget.setColumnCount(3) headers = ["PDF SN", "APPSHEET SN", "IS MATCH"] self.tableWidget.setHorizontalHeaderLabels(headers) # 设置列自动拉伸填充表格宽度 self.tableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch) self.vbox = QVBoxLayout() self.vbox.addWidget(self.tableWidget) # 移除错误的布局设置 # self.setLayout(self.vbox)
完整修改后的代码
class MyWindow(QMainWindow): def __init__(self): super(MyWindow, self).__init__() self.setGeometry(200, 200, 400, 400) self.setWindowTitle('OIL-CheckOrder') self.initUI() def initUI(self): w = QtWidgets.QWidget() self.setCentralWidget(w) grid = QtWidgets.QGridLayout(w) self.textbox = QLineEdit(self) self.textbox.setText('File') self.textbox.setReadOnly(True) self.textbox2 = QLineEdit(self) self.textbox2.setText('Order number') size = QSize(40, 40) self.b1 = QtWidgets.QPushButton(self) self.b1.setIcon(QIcon('./search.jpg')) self.b1.setIconSize(size) self.b1.clicked.connect(self.File_path) self.run = QtWidgets.QPushButton(self) self.run.setIcon(QIcon('./start.jpg')) self.run.setIconSize(size) self.run.clicked.connect(lambda path: self.loaddata(self.path)) self.createTable() grid.addWidget(self.b1, 0, 0, QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) grid.addWidget(self.textbox, 1, 0, 1, 3) grid.addWidget(self.textbox2, 2, 0, 1, 3) grid.addWidget(self.run, 0, 2, QtCore.Qt.AlignRight | QtCore.Qt.AlignTop) # 修改表格布局的添加方式,跨3列并设置行拉伸 grid.addLayout(self.vbox, 3, 0, 1, 3) grid.setRowStretch(3, 1) def createTable(self, pdfsn =[]): self.tableWidget = QTableWidget(self.centralWidget()) self.tableWidget.setColumnCount(3) headers = ["PDF SN", "APPSHEET SN", "IS MATCH"] self.tableWidget.setHorizontalHeaderLabels(headers) # 可选:设置固定尺寸或列拉伸,二选一启用 # 方式1:固定尺寸 # self.tableWidget.setFixedSize(320, 200) # self.tableWidget.setColumnWidth(0, 110) # self.tableWidget.setColumnWidth(1, 110) # self.tableWidget.setColumnWidth(2, 100) # 方式2:列自动拉伸 self.tableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch) self.vbox = QVBoxLayout() self.vbox.addWidget(self.tableWidget) # 移除错误的布局设置 # self.setLayout(self.vbox)
内容的提问来源于stack exchange,提问作者Michał B
相关产品推荐
相关产品推荐

