PyQt5-TableWidGet表格-13

  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

相關文章
相關標籤/搜索