问题描述
在这里阅读过一些类似的文章后,我仍在努力使用PyQt5和Python 3.8创建一个可以控制行高的表。
上面的图像是从下面的代码中捕获的。这些行之间的行距很宽,因此与tkinter的Treeview这样的类似表相比,我可以显示的信息少得多。行大小默认为25像素,我找不到缩小它的方法。
通常的resizeRowsToContents和setRowHeight似乎什么也没做。我该如何解决?
这是添加每一行的例程:
加载角色表的一行
def loadTable(self,row,names):
row = self.castTable.rowCount()
riter = iter(names)
self.castTable.insertRow(row)
#self.castTable.verticalHeader().setDefaultSectionSize(8)
self.castTable.setItem(row,QTableWidgetItem(next(riter)))
self.castTable.setItem(row,1,2,QTableWidgetItem(next(riter)))
#self.castTable.setRowHeight(row,20)
self.castTable.resizeRowsToContents()
这是创建表的主要代码:
def build(self):
self.setGeometry(300,300,500,500) #set up window
self.setwindowTitle('Cast list')
grid = qgridLayout() # and layout
# create an empty 3-column table,no grid lines or vertical header
self.castTable = QTableWidget(0,3,self)
self.castTable.verticalHeader().setVisible(False)
self.castTable.setShowGrid(False)
# table headers
grid.addWidget(self.castTable,5,1)
columns = ["Frname","Lname","Role"]
self.castTable.setHorizontalHeaderLabels(columns)
# self.castTable.horizontalHeader().font()
# column widths
self.castTable.setColumnWidth(0,100)
self.castTable.setColumnWidth(1,150)
self.castTable.setColumnWidth(2,175)
# add 3 rows
names = ["Edwin","Rodridguez","marco"]
self.loadTable(0,names)
names = ["Mike","Costantino","Guiseppe"]
self.loadTable(1,names)
names = ["John","Matilaine","Don Alhambra"]
self.loadTable(2,names)
# set the layout and show the table
self.setLayout(grid)
self.show()
解决方法
尝试一下:
from PyQt5 import QtCore,QtGui,QtWidgets
from PyQt5.Qt import *
class MainWindow(QWidget):
def __init__(self,*args,**kwargs):
super(MainWindow,self).__init__(*args,**kwargs)
self.setGeometry(700,200,500,500) #set up window
self.setWindowTitle('Cast list')
grid = QGridLayout() # and layout
# create an empty 3-column table,no grid lines or vertical header
self.castTable = QTableWidget(0,3,self)
# self.castTable.verticalHeader().setVisible(False) #
self.castTable.setShowGrid(False)
# table headers
grid.addWidget(self.castTable,5,1)
columns = ["Frname","Lname","Role"]
self.castTable.setHorizontalHeaderLabels(columns)
# self.castTable.horizontalHeader().font()
# column widths
self.castTable.setColumnWidth(0,100)
self.castTable.setColumnWidth(1,150)
self.castTable.setColumnWidth(2,175)
# add 3 rows
names = ["Edwin","Rodridguez","Marco"]
self.loadTable(0,names)
names = ["Mike","Costantino","Guiseppe"]
self.loadTable(1,names)
names = ["John","Matilaine","Don Alhambra"]
self.loadTable(2,names)
# set the layout and show the table
self.setLayout(grid)
for row in range(self.castTable.rowCount()): #
print(f'row={row},rowHeight={self.castTable.rowHeight(row)}') #
def loadTable(self,row,names):
row = self.castTable.rowCount()
riter = iter(names)
self.castTable.insertRow(row)
#self.castTable.verticalHeader().setDefaultSectionSize(8)
self.castTable.setItem(row,QTableWidgetItem(next(riter)))
self.castTable.setItem(row,1,2,QTableWidgetItem(next(riter)))
print(f'row = {(row+2) * 8}') #
self.castTable.setRowHeight(row,(row+2) * 8) # +++
# setRowHeight
# self.castTable.resizeRowsToContents() # ---
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle('Fusion') # +++
Form = MainWindow()
Form.show()
sys.exit(app.exec_())