【转】PyQt4 精彩实例分析 实例 7 表格的使用(二)

一般情况下,我所需要的仅仅是用 QTableWidget 来显示我的结果数据集

在参考了如下2篇博文

[PyQt]分析承载界面

pyqt下QTableWidget使用方法小结

实现了自己需要的一个简单功能的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()      #将行大小调整到跟内容的大学相匹配

posted @ 2014-11-17 14:13  jakey.chen  阅读(658)  评论(0)    收藏  举报