在Python中使用PyQt5,我试图创建一个包含不同数量单元格的QTableWidgets网格。我使桌子大小可调,以便它们适合窗户的可用尺寸。我可以在增加窗口大小的同时正确调整表格,也就是说,单元格保持相同的大小,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)
答案 0 :(得分:0)
表格不会调整小于默认的最小尺寸。所以只需选择一个更合适的值,如下所示:
class MyTable(QTableWidget):
def __init__(self, r, c):
...
self.setMinimumSize(40, 40)