【转】PyQt4 精彩实例分析 实例 7 表格的使用(二)
一般情况下,我所需要的仅仅是用 QTableWidget 来显示我的结果数据集
在参考了如下2篇博文
实现了自己需要的一个简单功能的MyTable
界面效果如下:

本实例的实现代码如下:
1 # -*- coding: utf-8 -*- 2 from PyQt4.QtGui import * 3 from PyQt4.QtCore import * 4 import sys 5 import copy 6 7 QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8")) 8 9 class MyTable(QTableWidget): 10 def __init__(self, table_list, parent=None, text_alignment=Qt.AlignHCenter): 11 super(MyTable,self).__init__(parent) 12 13 self.setWindowTitle(self.tr("Table")) 14 self.resize(600, 400) 15 self.table_list = table_list 16 self.text_alignment = text_alignment 17 self.cerate_table() 18 19 def cerate_table(self): 20 BGColor = QColor(255,0,0) 21 textFont = QFont("Monaco", 10, QFont.Bold) 22 23 result_dict = dict() 24 column_name_list = [] 25 26 for index,item_list in enumerate(self.table_list): 27 if index == 0: 28 column_name_list = copy.copy(item_list) 29 for name in item_list: 30 result_dict[name] = list() 31 else: 32 for i in range(len(item_list)): 33 result_dict[column_name_list[i]].append(item_list[i]) 34 35 # set table row and col 36 rowNum = len(self.table_list) - 1 37 colNum = len(column_name_list) 38 self.setColumnCount(colNum) 39 self.setRowCount(rowNum) 40 41 # self.setFont(textFont) 42 43 # set header 44 for i in range(len(column_name_list)): 45 self.setHorizontalHeaderItem(i,QTableWidgetItem(str(column_name_list[i]))) 46 47 # set table value 48 for j in range(len(column_name_list)): 49 for k in range(rowNum): 50 self.setItem(k,j,QTableWidgetItem(str(result_dict[column_name_list[j]][k]))) 51 self.item(k,j).setTextAlignment(self.text_alignment|Qt.AlignVCenter) 52 # self.setAlternatingRowColors(True) 53 54 # change background color 55 bg_item_list = [(1, 1), (3, 2)] 56 for item in bg_item_list: 57 self.item(item[0], item[1]).setBackgroundColor(BGColor) 58 self.item(item[0], item[1]).setFont(textFont) 59 60 # self.setSelectionBehavior(QAbstractItemView.SelectRows) 61 # self.setEditTriggers(QAbstractItemView.NoEditTriggers) 62 63 self.connect(self, SIGNAL("itemClicked (QTableWidgetItem*)"), self.outSelect) 64 65 def outSelect(self, Item=None): 66 if Item is None: 67 return 68 print Item.text() 69 70 def main(): 71 result_list = [["a", "b", "c"], 72 [1, 2, 3], 73 [4, 5, 6], 74 [7, 8, 9], 75 [10, 11, 12]] 76 app = QApplication(sys.argv) 77 myapp = MyTable(result_list) 78 myapp.setWindowTitle("Table") 79 myapp.show() 80 app.exec_() 81 82 if __name__ == '__main__': 83 main()
第 10 行 构造函数,初始化需要提供一个结果列表,表格数据默认显示为剧中
第 35-38 行 设置表格行和列
第 41 行 设置表格显示字体
第 44-45 行 设置表头
第 48-51 行 设置表格各个单元格的数据
第 52 行 设置隔行变色(白灰相间)
第 54-58 行 设置特定位置的背景色和字体(x,y行列坐标)
第 60 行 设置选择整行
第 61 行 设置不允许编辑
第 63 行 获取点击数据处理
可能有用的一些设置选项:
--表格表头的显示与隐藏
对于水平或垂直方法的表头,可以用以下方式进行 隐藏/显示 的设置:
self.MyTable.verticalHeader().setVisible(False)
self.MyTable.horizontalHeader().setVisible(False)
--合并单元格效果的实现:
self.MyTable.setSpan(0, 0, 3, 1) # 其参数为: 要改变单元格的 1行数 2列数 要合并的 3行数 4列数
--设置单元格的大小
首先,可以指定某个行或者列的大小
self.MyTable.setColumnWidth(2,50) #将第2列的单元格,设置成50宽度
self.MyTable.setRowHeight(2,60) #将第2行的单元格,设置成60的高度
还可以将行和列的大小设为与内容相匹配
self.MyTable.resizeColumnsToContents() #将列调整到跟内容大小相匹配
self.MyTable.resizeRowsToContents() #将行大小调整到跟内容的大学相匹配

浙公网安备 33010602011771号