第十九篇 -- QTableWidget的使用


QTableWidget的一些常用方法

下面兩個類可以根據自己的情況自定義。

單元格類型的類:

class CellType(Enum):
    ctKey = 1000
    ctPath = 1001
    ctInfo = 1002

 

單元格列的類:

class FieldColNum(Enum):
    colKey = 0
    colPath = 1
    colInfo = 2

 

 

一、設置TableWidget的表頭

headerItem = QTableWidgetItem("要寫入單元格里的內容")
self.ui.tableWidget.setHorizontalHeaderItem(列數序號, headerItem)

 

二、設置TableWidget行數

self.ui.tableWidget.setRowCount(行數)

 

三、設置TableWidget單元格內容

item = QTableWidgetItem("單元格內容", 單元格類型) # CellType.ctKey.value
self.ui.tableWidget.setItem(行序號, 列序號, item)

 

四、插入、添加、刪除

curRow = self.ui.tableWidget.currentRow()  # 當前行號
self.ui.tableWidget.insertRow(curRow)  # 插入行

curRow = self.ui.tableWidget.rowCount()
self.ui.tableWidget.insertRow(curRow)  # 添加行

curRow = self.ui.tableWidget.currentRow()  # 當前行號
self.ui.tableWidget.removeRow(curRow)  # 刪除行

 

五、自動調整行高、自動調整列寬

self.ui.tableWidget.resizeRowsToContents()  # 自動調整行高
self.ui.tableWidget.resizeColumnsToContents()  # 自動調整列寬

 

六、是否可編輯

self.ui.tableWidget.setEditTriggers(QAbstractItemView.DoubleClicked | QAbstractItemView.SelectedClicked)  # 可編輯
self.ui.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)  # 不可編輯

 

七、是否顯示行表頭,是否顯示列表頭。True代表是,False代表不顯示

self.ui.tableWidget.horizontalHeader().setVisible(True)  # 顯示行表頭
self.ui.tableWidget.verticalHeader().setVisible(True)  # 顯示列表頭

 

八、行選擇、單元格選擇

self.ui.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)  # 行選擇
self.ui.tableWidget.setSelectionBehavior(QAbstractItemView.SelectItems)  # 單元格選擇

 

九、清空表格內容

self.ui.tableWidget.clearContents()

 

十、讀取單元格內容

item = self.ui.tableWidget.item(行序號, 列序號)
content = item.text()  # 獲取單元格內容
status = item.checkState()  # 獲取單元格狀態,Qt.Checked或者Qt.Unchecked

 

十一、間隔行變色

self.ui.tableWidget.setAlternatingRowColors(True)  # 變色
self.ui.tableWidget.setStyleSheet("alternate-background-color: rgb(197, 197, 197);")

 

 

十二、設置列寬。參考鏈接:https://blog.csdn.net/baidu_37503452/article/details/104225719

self.ui.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.ui.tableWidget.horizontalHeader().setSectionResizeMode(0, QHeaderView.Interactive)

 

十三、在一個單元格中插入一個button

            btn_path_select = QPushButton("...")
            self.ui.tableWidget.setCellWidget(j, 1, btn_path_select)

 

效果圖:

 

十四、在一個單元格中插入兩個控件

            label_path_select = QLabel(“\路徑\test.py”)
            btn_path_select = QPushButton("...")
            btn_path_select.setMaximumWidth(40)
            cell_widget = QWidget()
            box_layout = QHBoxLayout(cell_widget)
            box_layout.addWidget(label_path_select)
            box_layout.addWidget(btn_path_select)
            box_layout.setContentsMargins(0, 0, 0, 0)
            self.ui.tableWidget.setCellWidget(j, 1, cell_widget)

 

效果圖:

 

十五、設置單元格中button按鈕的單擊事件

    def do_btn_path_select_clicked(self):
        sender_obj = self.sender()
        cell_widget = sender_obj.parent()
        # print(cell_widget.children()[1])
        cell_idx = self.ui.tableWidget.indexAt(QPoint(cell_widget.frameGeometry().x(), cell_widget.frameGeometry().y()))
cell_row = cell_idx.row()
cell_column = cell_idx.column()
     # 單元格的行和列
print(cell_row, cell_column)
        if sender_obj is None:
            pass
        else:
            idx = self.ui.tableWidget.indexAt(QPoint(sender_obj.frameGeometry().x(), sender_obj.frameGeometry().y()))
       # button的行和列 row
= idx.row() column = idx.column() if column == 1: filename, flt = QFileDialog.getOpenFileName(self, "選擇一個或多個文件", "", "All Files (*);;Text Files (*.txt)") cell_widget.children()[1].setText(filename)

 

效果圖:

 

十六、設置QTableWidget的單擊事件

    def do_table_widget_clicked(self, index):
        table_column = index.column()
        table_row = index.row()
        # current_item = self.ui.tableWidget.item(table_row, table_column)
        current_widget = self.ui.tableWidget.cellWidget(table_row, table_column)
        path_label_obj = current_widget.children()[1]
        path_button_obj = current_widget.children()[2]
        # print(path_label_obj.text())
        path_label_obj.setText("已單擊此單元格")

 

效果圖:

 

十七、單擊單元格cellWidget事件

    def do_table_widget_cell_clicked(self, row, column):
        current_widget = self.ui.tableWidget.cellWidget(row, column)
        path_label_obj = current_widget.children()[1]
        path_label_obj.setText("已單擊此單元格")

 

效果圖同十六是一樣的。

 

關於TableWidget的一些基本設置說完了以后,下面就了解一下可能值得注意的點。

 

首先,關於splitter的比例問題。在右側,QTableWidget和QPlainTextEdit兩個組件剛布局為splitter時,兩個的比例是1:1,如果想要按照自己的比例調整大小,怎么辦呢。

先選中QTableWidget,在其屬性那里找到Vertical Stretch屬性,這里設置為6,同樣,選中QPlainTextEdit,在其屬性里找到那個屬性,設置為4。那么這兩個控件高度的比例就為6:4了。

 

第二個就是關於那個隔行變色的功能了,原始的是白色和灰色,效果並不明顯,所以我自己修改了顏色,對比度更大一點。

找到styleSheet屬性,點擊右邊的那三個點。

選擇Add Color --》alternate-background-color,然后選擇一個自己喜歡的顏色就好了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM