【发布时间】:2017-11-08 11:54:06
【问题描述】:
将 PyQt5 与 Python 结合使用,我正在尝试创建一个包含不同数量单元格的 QTableWidget 网格。我使桌子的尺寸可调,以便它们很好地适合窗口的可用尺寸。我能够在增加窗口大小的同时正确调整表格,也就是说,单元格保持相同的大小,并且 QTableWidgets 将它们的大小调整为可用空间。这种调整是通过覆盖 QTableWidget 类的 resizeEvent 并为 QGridLayout 设置行和列延伸来完成的。如下图所示。
然而,当 QMainWindow 变小时,QTableWidgets 在某些时候变得无法调整它们的大小。
是否可以在缩小窗口时使 QTableWidgets 的尺寸变小?显然,单元格中的值可以实现这一点。
下面给出了我实现上述表格网格的代码。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout
from PyQt5.QtWidgets import QTableWidget, QWidget
class MyTable(QTableWidget):
def __init__(self, r, c):
super().__init__(r, c)
self.horizontalHeader().hide()
self.verticalHeader().hide()
def resizeEvent(self, event):
eh = event.size().height()
ew = event.size().width()
ehremain = eh
eqremain = ew
rh = int(eh // self.rowCount())
cw = int(ew // self.columnCount())
for i in range(self.rowCount()-1):
self.setRowHeight(i, rh)
ehremain -= rh
self.setRowHeight(self.rowCount()-1, ehremain)
for j in range(self.columnCount()-1):
self.setColumnWidth(j, cw)
eqremain -= cw
self.setColumnWidth(self.columnCount()-1, eqremain)
class TableGrid(QWidget):
def __init__(self):
super().__init__()
self.table1 = MyTable(1,1)
self.table2 = MyTable(1,3)
self.table3 = MyTable(3,1)
self.table4 = MyTable(3,3)
grid_layout = QGridLayout()
grid_layout.addWidget(self.table1, 0,0)
grid_layout.addWidget(self.table2, 0,1)
grid_layout.addWidget(self.table3, 1,0)
grid_layout.addWidget(self.table4, 1,1)
grid_layout.setRowStretch(0,1)
grid_layout.setRowStretch(1,3)
grid_layout.setColumnStretch(0,1)
grid_layout.setColumnStretch(1,3)
self.setLayout(grid_layout)
self.show()
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.table_grid = TableGrid()
self.setCentralWidget(self.table_grid)
self.show()
if __name__ =="__main__":
app = QApplication.instance() # checks if QApplication already exists
if not app: # create QApplication if it doesnt exist
app = QApplication(sys.argv)
app.aboutToQuit.connect(app.deleteLater)
sheet = Window()
app.exec_()
#sys.exit(0)
【问题讨论】:
标签: python pyqt resize pyqt5 qtablewidget