1 #demo_14:關於TableWidGet的使用,注意:在table表頭分爲水平和垂直兩種,及horizontal header和vertical header兩類。 2 3 from PyQt5.QtWidgets import (QTableWidget,QApplication,QWidget,QTableWidgetItem,QHBoxLayout) 4 from PyQt5.QtCore import Qt 5 import PyQt5.QtGui as QtGui 6 7 import sys 8 class Example(QWidget): 9 data=[{'num':'101','name':'JONES','sal':200,'date':'1999-10-10','sex':'女'}, 10 {'num': '102', 'name': 'SITH', 'sal': 200, 'date': '1999-11-10', 'sex': '女'}, 11 {'num': '103', 'name': 'SDF', 'sal': 200, 'date': '1999-12-10', 'sex': '女'}, 12 {'num': '104', 'name': 'JSSS', 'sal': 200, 'date': '1999-11-10', 'sex': '女'}, 13 {'num': '105', 'name': 'JEEE', 'sal': 200, 'date': '1912-10-10', 'sex': '女'} 14 ] 15 16 def __init__(self): 17 super().__init__() 18 self.initUI() 19 20 def initUI(self): 21 titles = ['編號', '姓名', '工資', '入職日期', ' 性別'] 22 self.setWindowTitle('員工信息') 23 self.table = QTableWidget() 24 self.table.setRowCount(9) #行下標最大值 25 self.table.setColumnCount(5) #列 26 self.table.setHorizontalHeaderLabels(titles) #標題列 27 28 29 #表格或者窗體背景圖片 30 palette = QtGui.QPalette() 31 icon = QtGui.QPixmap('a.jpg') 32 palette.setBrush(self.table.backgroundRole(), QtGui.QBrush(icon)) # 添加背景圖片 33 self.setPalette(palette) 34 #表格行 35 self.table.horizontalHeader().setStyleSheet("background-color: gray"); 36 # self.table.setEditTriggers(QTableWidget.NoEditTriggers)#單元格不可編輯 37 # self.table.setSelectionBehavior(QTableWidget.SelectRows) #選中列仍是行,這裏設置選中行 38 # self.table.setSelectionMode(QTableWidget.SingleSelection) #只能選中一行或者一列 39 #self.table.horizontalHeader().setStretchLastSection(True) #列寬度佔滿表格(最後一個列拉伸處理沾滿表格) 40 #self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch);#全部列自適應表格寬度 41 42 #一、設置每個標題單元格樣式 43 # for i in range(self.table.columnCount()): 44 # headItem = self.table.horizontalHeaderItem(i) 45 # headItem.setFont(QFont("song", 14, QFont.Bold)) 46 # headItem.setForeground(QBrush(Qt.gray)) 47 # headItem.setBackgroundColor(QColor(0, 60, 10)) # 設置單元格背景顏色 48 # #headItem.setTextColor(QColor(200, 111, 30)) # 設置文字顏色 49 # headItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) 50 51 #二、設置整個表格列標題樣式 52 font = self.table.horizontalHeader().font() 53 font.setBold(True) 54 self.table.horizontalHeader().setFont(font) 55 #self.table.setFrameShape(QFrame.NoFrame) #設置表格外層無邊框 56 #self.table.setShowGrid(False) #是否顯示單元格網格線False 則不顯示 57 #self.table.horizontalHeader().setHighlightSections(False) #設置表格列頭不塌陷 58 #self.table.horizontalHeader().setFixedHeight(35) #設置表列頭高度 59 #self.table.horizontalHeader().setVisible(False) #設置隱藏列頭 60 #self.table.horizontalHeader().setFixedWidth(820) #設置列標題頭所在行,寬度(沒啥用) 61 62 63 #設置表格的滾動調樣式:self.table.horizontalScrollBar().setStyleSheet.... ,窗體的也能夠設置:self.horizontalScrollBar().setStyleSheet... 64 self.table.horizontalScrollBar().setStyleSheet("QScrollBar{background:transparent; height:10px;}" 65 "QScrollBar::handle{background:lightgray; border:2px solid transparent; border-radius:5px;}" 66 "QScrollBar::handle:hover{background:gray;}" 67 "QScrollBar::sub-line{background:transparent;}" 68 "QScrollBar::add-line{background:transparent;}"); 69 self.table.verticalScrollBar().setStyleSheet("QScrollBar{background:transparent; width: 10px;}" 70 "QScrollBar::handle{background:lightgray; border:2px solid transparent; border-radius:5px;}" 71 "QScrollBar::handle:hover{background:gray;}" 72 "QScrollBar::sub-line{background:transparent;}" 73 "QScrollBar::add-line{background:transparent;}"); 74 #遍歷數據,並造成行索引,列索引; 75 item = [(j, c,Example.data[c].values()) for j in range(len(Example.data)) for c in range(5)] 76 for v in item: 77 print('行下標%s,列下標%s,值:%s' % (v[1], v[0], list(v[2])[v[0]])) 78 self.table.setItem(v[1], v[0], QTableWidgetItem(str(list(v[2])[v[0]]))) #注意,純數值,則須要str不然放不進去,不顯示 79 self.table.setColumnWidth(v[0], 120) #設置列寬度,列索引,寬度 80 self.table.setRowHeight(v[1], 20) #設置行高度,行索引,高度 81 # 設置入職日期列,居中 82 #print(type(self.table.item(v[1], 2)),v[1]) 83 if self.table.item(v[1], 3): 84 self.table.item(v[1], 3).setTextAlignment(Qt.AlignHCenter) 85 row_count = self.table.rowCount() 86 self.table.insertRow(row_count) 87 88 mainLayout = QHBoxLayout() 89 mainLayout.addWidget(self.table) 90 self.setLayout(mainLayout) 91 self.setGeometry(200,300,600,400) 92 self.show() 93 94 if __name__ == '__main__': 95 app = QApplication(sys.argv) 96 e = Example() 97 sys.exit(app.exec_()) 98 99 # 測試循環遍歷上面集合,按照下標直接定位每個元素的值 100 # data = [{'num': '101', 'name': 'JONES', 'sal': 200, 'date': '1999-10-10', 'sex': '女'}, 101 # {'num': '102', 'name': 'SITH', 'sal': 200, 'date': '1999-11-10', 'sex': '女'}, 102 # {'num': '103', 'name': 'SDF', 'sal': 200, 'date': '1999-12-10', 'sex': '女'}, 103 # {'num': '104', 'name': 'JSSS', 'sal': 200, 'date': '1999-11-10', 'sex': '女'}, 104 # {'num': '105', 'name': 'JEEE', 'sal': 200, 'date': '1912-10-10', 'sex': '女'} 105 # ] 106 # print([(j, c, Example.data[c].values()) for j in range(len(Example.data)) for c in range(5)]) 107 # for v in [(j, c, Example.data[c].values()) for j in range(len(Example.data)) for c in range(5)]: 108 # print('行下標%s,列下標%s,值:%s' % (v[1], v[0], list(v[2])[v[0]])) 109 110 111 112 113 114 ''' 115 Qt.AlignLeft 116 Qt.AlignRight 117 Qt.AlignHCenter 118 Qt.AlignJustify 119 ''' 120 ''' 121 設置表格的編輯屬性:QAbstractItemView.NoEditTriggers:不可編輯 122 123 QAbstractItemView.CurrentChanged:改變了便可編輯 124 125 QAbstractItemView.DoubleClicked:連續雙擊便可編輯 126 127 QAbstractItemView.SelectedClicked:在被選中的狀況下單擊一次便可編輯 128 129 QAbstractItemView.EditKeyPressed:在按下平臺的編輯鍵那個項目上便可編輯 130 131 選擇時每次選擇一行:myTable.setSelectionBehavior(QAbstractItemView.SelectRows), 132 133 '''
上面根據列表字典遍歷方式,開發可能用到,須要你好好看看;直接定位每一個字典的value所在行列位置;app