PyQt5 表格控件(QTableWidget)
一篇實例(轉載)
from PyQt5.QtWidgets import QApplication,QTableWidget,QWidget,QHeaderView,QPushButton,QTableWidgetItem,QFrame
import sys
from PyQt5.QtGui import QBrush,QColor,QFont,QIcon
from PyQt5.QtCore import Qt,QSize
class win(QWidget):
def __init__(self):
super().__init__()
self.resize(500,500)
self.setWindowTitle('表格學習')
titles = ['編號', '姓名', '工資', '入職日期', ' 性別']
self.table = QTableWidget(self) #創建空表格
self.table.resize(450,300)
#self.table = QTableWidget(4,3,self) #創建4行3列的表格
self.table.setRowCount(9) # 設置行數--不包括標題列
self.table.setColumnCount(5) # 設置列數
self.table.setHorizontalHeaderLabels(titles) # 標題列---水平標題
#參數 標題列表
#self.table.setVerticalHeaderLabels(titles) # 標題列---垂直標題
#self.table.horizontalHeader().setStyleSheet("background-color: blue")#表格頭添加背景顏色
#沒有效果 ???
self.table.setEditTriggers(QTableWidget.AnyKeyPressed) # 單元格用戶能否、如何編輯
#QTableWidget.NoEditTriggers 單元格用戶不可編輯
#QTableWidget.DoubleClicked 連續雙擊即可編輯
#QTableWidget.SelectedClicked 在被選中的情況下單擊一次即可編輯
#QTableWidget.CurrentChanged 選中的單元格改變了即可編輯
#QTableWidget.AnyKeyPressed 按下任何符號鍵即可編輯
self.table.setSelectionBehavior(QTableWidget.SelectItems) # 設置選中行
#鼠標點選時,默認選中一個單元格---QTableWidget.SelectItems
#QTableWidget.SelectRows 鼠標點擊選中一行
#QTableWidget.SelectColumns 鼠標點擊選中一列
self.table.setAlternatingRowColors(True) #行是否自動變色
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) #設置列寬的適應方式
#QHeaderView.Stretch 拉伸--表格總寬度充滿表格
#QHeaderView.Fixed 固定寬度
#QHeaderView.ResizeToContents 適應內容
s=self.table.columnCount() #返回列數
QTableWidget.resizeRowsToContents(self.table) #設置行高與內容匹配
#QTableWidget.resizeColumnsToContents(self.table)
#self.table.horizontalHeader().setFixedHeight(50) # 設置表列頭高度
#self.table.horizontalHeader().setFixedWidth(820) # 設置列寬(沒啥用)
#self.table.setColumnWidth(1, 350) #設置某列的寬度
#setSectionResizeMode 設置后,這個指令無效
#self.table.setRowHeight(0, 120) #設置某行的高度
self.table.horizontalHeader().setVisible(True) #水平表格頭是否隱藏
#self.table.verticalHeader().setVisible(False) #垂直表格頭是否隱藏
lb=QPushButton('按鈕')
#self.table.setCellWidget(0, 1, lb) #在指定單元格內放置控件
#0行1列----不包括標題頭
newItem = QTableWidgetItem('1') #創建表格項---文本項目
self.table.setItem(0, 0, newItem) #給指定單元格設置數據
newItem = QTableWidgetItem('12')
self.table.setItem(1,0,newItem)
newItem = QTableWidgetItem('123')
self.table.setItem(2, 0, newItem)
newItem = QTableWidgetItem('1234')
self.table.setItem(3, 0, newItem)
newItem = QTableWidgetItem('12')
self.table.setItem(4, 0, newItem)
pb=QPushButton('測試按鈕',self)
pb.move(50,470)
pb.clicked.connect(self.AA)
self.table.hideRow(1) #隱藏指定行
self.table.showRow(1) # 顯示指定行
item=self.table.item(1,0) #返回指定單元格的對象
s=self.table.item(1, 0).text() #返回指定單元格的文本內容
item.setForeground(QBrush(QColor(255, 0, 0))) #設置指定單元格的前景色
item.setBackground(QColor(250, 0, 0)) #設置指定單元格的背景景色
item.setTextAlignment(Qt.AlignRight | Qt.AlignBottom) #給指定單元格設置對齊方式
#self.table.sortItems(0, Qt.DescendingOrder) #指定列排序
#參數1 列序號
#參數2 Qt.DescendingOrder 降序;Qt.AscEndingOrder 升序
headItem = self.table.horizontalHeaderItem(1) #獲取指定列的標題項的對象
s= self.table.horizontalHeaderItem(1).text() #獲取指定列的標題文本內容
headItem.setFont(QFont("黑體", 14, QFont.Bold)) #給指定列的標題設置字體
headItem.setForeground(QBrush(Qt.blue)) #給指定列的標題設置文本顏色
headItem.setBackground(QColor(0, 0, 250) ) # 給指定列的標題設置背景顏色
#沒有效果 ???
items = self.table.findItems('12', Qt.MatchExactly) #尋找
#Qt.MatchContains 只要包含指定文本的就算
#Qt.MatchExactly 完全匹配才算
#返回值:滿足條件的單元格對象的列表
item=items[0]
item.setSelected(False) #設置指定單元格是否選中
s=item.row() #返回單元格對象的行號
#self.table.setSpan(2, 0, 4, 1) #合並單元格
#2行0列開始,占據4行1列
font = self.table.horizontalHeader().font() #獲取水平標題頭的字體 font.setBold(True)
font.setPointSize(13)
self.table.horizontalHeader().setFont(font) #給水平標題頭設置字體
#headItem.setFont已經設置過的好像不起效果【特異性原則】
#self.table.setFrameShape(QFrame.NoFrame) # 設置表格外層無邊框
#self.table.setShowGrid(False) # 是否顯示單元格網格線,False 則不顯示
#self.table.horizontalHeader().setHighlightSections(True) # 設置表格列頭是否塌陷
#看不出效果 ???
newItem = QTableWidgetItem(QIcon("./大象.png"), "大象") #創建表格項---圖片項目
#參數2 描述
self.table.setIconSize(QSize(100, 100)) #設置圖片大小
newItem.setFlags(Qt.ItemIsEnabled) #用戶點擊表格時,圖片被選中
self.table.setColumnWidth(2, 100) #設置指定列的列寬
self.table.setRowHeight(2, 100) #設置指定行的行高
self.table.setItem(2, 2, newItem) #給指定單元格設置圖片項
#self.table.clear() #清除所有數據--包括標題頭
self.table.clearContents() #清除所有數據--不包括標題頭
print(s)
def AA(self):
s=self.table.currentRow() #返回當前行序號
#self.table.insertRow(s) #在指定行的上面插入一行
#self.table.removeRow(s) #刪除指定行
s=self.table.currentColumn() #返回當前列序號
#self.table.insertColumn(s) #在指定列的前面插入一列
#self.table.removeColumn(s) #刪除指定列