簡體   English   中英

PyQt5 表格行高

[英]PyQt5 Table row height

在這里閱讀了一些類似的帖子后,我仍在努力使用 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, 0, QTableWidgetItem(next(riter)))
    self.castTable.setItem(row, 1, QTableWidgetItem(next(riter)))
    self.castTable.setItem(row, 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, 0, 0, 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, 0, 0, 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, 0, QTableWidgetItem(next(riter)))
        self.castTable.setItem(row, 1, QTableWidgetItem(next(riter)))
        self.castTable.setItem(row, 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_())

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM