QTableWidget&&QTableView

QtableWidget是繼承於QtableView的。所以QtableView的方法也在QtableWidget中繼承了。

    QTableWidget類提供了一個默認模式的表格,它是基於Item的,這個Item是由QTableWidgetItem提供的。如果你要構建自己的數據模式,請使用QTableView而不是QTableWidget

 

一,如何構建一個QtableWidget

# !/usr/bin/python

import sys

from PyQt4.QtGui import *

class TableWidget(QMainWindow):

    def __init__(self,parent=None):

        QWidget.__init__(self,parent)

        self.setWindowTitle('TableWidget')

        self.table = QTableWidget(10,6)

        self.setCentralWidget(self.table)

app = QApplication(sys.argv)

tb = TableWidget()

tb.show()

app.exec_()

結果如下圖所示:創建了一個106列的表格,可編輯可輸入。

初始化的時候也可以不設置行數和列數。而等到創建完了以後再設。

比如:

    self.table = QTableWidget()

    self.table.setRowCount(10)

    self.table.setColumnCount(6)

這樣結果是跟上面一樣的。

PyQt學習筆記(17)鈥斺擰TableWidget

 

 

二,添加表頭。

可以添加水平和垂直表頭,QtableWidget提供了兩個方法來添加表頭,非常方便。

self.table = QTableWidget(5,7)

  self.table.setHorizontalHeaderLabels(['SUN','MON','TUE','WED',

                                              'THU','FIR','SAT'])

上面兩句就是添加水平表頭。假如我們不添加表頭,那麼表頭默認的數字就是代表所在

行或者所在列。

 

三,添加表項。

    self.newItem = QTableWidgetItem('Item')

self.table.setItem(1,2,self.newItem)

如下圖:可以看出,行列數是指不算標題行,都是從第0行,或者第0列開始計數的。

PyQt學習筆記(17)鈥斺擰TableWidget

 

下面我們通過循環來添加表項的所有內容:

self.table = QTableWidget(5,7)       

self.table.setHorizontalHeaderLabels(['SUN','MON','TUE','WED',

                                              'THU','FIR','SAT'])

        for i in range(self.table.rowCount()):

            for j in range(self.table.columnCount()):

                cnt = '(%d,%d)'% (i,j)

                newItem = QTableWidgetItem(cnt)

                self.table.setItem(i,j,newItem)

QTableWidget.rowCount()是得到行數,int型。

QTableWidget.columnCount()是得到列數,int

結果如下:

 

 PyQt學習筆記(17)鈥斺擰TableWidget

四,修改表項內容

QTableWidget.clear(self) 清楚所有表項及表頭

QTableWidget.clearContents(self) 只清楚表項,不清楚表頭。

QTableWidget.insertColumn(self, int column) 在某一列插入新的一列。

QTableWidget.insertRow(self, int row)在某一行插入新的一行。

QTableWidget.removeColumn(self, int column) 移除column列及其內容。

QTableWidget.removeRow(self, int row)移除第row行及其內容。

 

五,關於顯示的一些問題,外觀

QTableView.setShowGrid (self, bool show) TableView繼承而來的,

是否顯示錶格的橫豎線,默認情況下是顯示的,如上面的例子,如果設爲setShowGrid(False) ,則不顯示分割線,橫豎都沒有。

    另外,還可以通過hideRow(),hideColumn(),showRow(),showColumn()等來隱藏或顯示特定行和列

    還有一個是否顯示錶頭的問題,比如很多情況下我們只需要水平表頭,不需要垂直表頭,怎麼辦呢?我們在上面的例子中加上這麼一句:

    self.table.verticalHeader().setVisible(False)

    setVisible是所有Qwidget都有的方法,而self.table.verticalHeader()是得到了一個表頭,表頭也是QheaderView繼承來的,也是Qwidget的子類,所以也可以調用setVisible()方法來顯示或者隱藏表頭。

    結果如下圖:

PyQt學習筆記(17)鈥斺擰TableWidget

    因爲繼承關係,父類的很多方法都可以調用,所以QTableWidget的方法非常之多,應該有幾百個,一一學習是不可能的,只能用到的時候去查。下面介紹幾個繼承於上面父類的方法。

QabstractItemView QTableWidget的父類的父類,他有下面幾個方法,我們QTableWidget中經常調用,就是是否項目可編輯,點擊選擇是選擇行,還是可以選擇列,是可以選擇多行(多列),還是只可以選擇單行(單列),等等非常好用,如下的列子:

self.table.setEditTriggers(QTableWidget.NoEditTriggers)

    self.table.setSelectionBehavior(QTableWidget.SelectRows)

    self.table.setSelectionMode(QTableWidget.SingleSelection)

self.table.setAlternatingRowColors(True)

    第一句,設爲不可編輯狀態,第二是選擇行,第三是選擇單個行,第四是隔行改變顏色。

    結果如下:

PyQt學習筆記(17)鈥斺擰TableWidget

 

不能編輯,不能選擇一列或者單個項目,只能選擇單一行。

    另外可以修改行寬高等大小信息,還有各行,列,等的顏色問題,帶圖標的標題等等美化措施,請參看documentation

發佈了3 篇原創文章 · 獲贊 3 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章