PyQt5表格行高度

问题描述

在这里阅读过一些类似的文章后,我仍在努力使用PyQt5和Python 3.8创建一个可以控制行高的表。

enter image description here

上面的图像是从下面的代码中捕获的。这些行之间的行距很宽,因此与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_())

enter image description here