import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem, QAbstractItemView )
class Table(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget 例子")
self.resize(430,230);
conLayout = QHBoxLayout()
tableWidget = QTableWidget()
tableWidget.setRowCount(4)
tableWidget.setColumnCount(3)
conLayout.addWidget(tableWidget )
tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])
tableWidget.setVerticalHeaderLabels(["行1", "行2", "行3", "行4", "行5"])
tableWidget.horizontalHeader().setSelectionResizeMode(QHeaderView.Stretch)#設置表格爲自適應的伸縮模式
newItem = QTableWidgetItem("張三")
tableWidget.setItem(0, 0, newItem)
newItem = QTableWidgetItem("男")
tableWidget.setItem(0, 1, newItem)
newItem = QTableWidgetItem("160")
tableWidget.setItem(0, 2, newItem)
# 將表格變爲禁止編輯
#tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
# 設置表格爲整行選擇
#tableWidget.setSelectionBehavior( QAbstractItemView.SelectRows)
# 將行和列的大小設爲與內容相匹配
#tableWidget.resizeColumnsToContents()
#tableWidget.resizeRowsToContents()
#表格表頭的顯示與隱藏
#tableWidget.verticalHeader().setVisible(False)
#tableWidget.horizontalHeader().setVisible(False)
# 不顯示錶格單元格的分割線
#tableWidget.setShowGrid(False)
# 不顯示垂直表頭
tableWidget.verticalHeader().setVisible(False)
comBox = QComboBox()
combox.addItem("男")
comBox.addItem("女")
comBox.setStyleSheet("QComboBox{margin:3px};")
tableWidget.setCellWidget(0, 1, comBox)
searchBtn = QPushButton("修改")
searchBtn.setDown(True)
searchBtn.setStyleSheet("QPushButton{margin:3px};")
tableWidget.setCellWidget(0, 2, searchBtn)
self.setLayout(conLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Table()
example.show()
sys.exit(app.exec_())
在表格中快速定位到指定行
# -*- coding: utf-8 -*-
'''
【簡介】
PyQT5的表格控件選中單元格
'''
import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtCore
from PyQt5.QtGui import QColor , QBrush
class Table(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget 例子")
self.resize(600,800);
conLayout = QHBoxLayout()
tableWidget = QTableWidget()
tableWidget.setRowCount(30)
tableWidget.setColumnCount(4)
conLayout.addWidget(tableWidget )
for i in range(30):
for j in range(4):
itemContent = '(%d,%d)'% (i,j)
tableWidget.setItem(i,j, QTableWidgetItem( itemContent ) )
self.setLayout(conLayout)
#遍歷表查找對應的item
text = "(10,1)"
items = tableWidget.findItems(text, QtCore.Qt.MatchExactly)
item = items[0]
# 選中單元格
#item.setSelected( True)
# 設置單元格的背景顏色爲紅色
item.setForeground(QBrush(QColor(255, 0, 0)))
row = item.row()
#滾輪定位過去,快速定位到第17行
tableWidget.verticalScrollBar().setSliderPosition(row)
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Table()
example.show()
sys.exit(app.exec_())
2、設置單元格
(1)設置單元格文本顏色
# -*- coding: utf-8 -*-
'''
【簡介】
PyQT5中單元格內的文本顏色
'''
import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem )
from PyQt5.QtGui import QBrush, QColor , QFont
class Table(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget 例子")
self.resize(430,230);
conLayout = QHBoxLayout()
tableWidget = QTableWidget()
tableWidget.setRowCount(4)
tableWidget.setColumnCount(3)
conLayout.addWidget(tableWidget )
tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])
newItem = QTableWidgetItem("張三")
newItem.setForeground(QBrush(QColor(255, 0, 0)))
tableWidget.setItem(0, 0, newItem)
newItem = QTableWidgetItem("男")
newItem.setForeground(QBrush(QColor(255, 0, 0)))
tableWidget.setItem(0, 1, newItem)
newItem = QTableWidgetItem("160")
newItem.setForeground(QBrush(QColor(255, 0, 0)))
tableWidget.setItem(0, 2, newItem)
self.setLayout(conLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Table()
example.show()
sys.exit(app.exec_())
(2)字體加粗
# -*- coding: utf-8 -*-
'''
【簡介】
PyQT5中單元格內的字體大小
'''
import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem )
from PyQt5.QtGui import QBrush, QColor , QFont
class Table(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget 例子")
self.resize(430,230);
conLayout = QHBoxLayout()
tableWidget=QTableWidget()
tableWidget.setRowCount(4)
tableWidget.setColumnCount(3)
conLayout.addWidget(tableWidget )
tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])
newItem = QTableWidgetItem("張三")
newItem.setFont( QFont( "Times", 12, QFont.Black ) )
tableWidget.setItem(0, 0, newItem)
newItem = QTableWidgetItem("男")
newItem.setFont( QFont( "Times", 12, QFont.Black ) )
tableWidget.setItem(0, 1, newItem)
newItem = QTableWidgetItem("160")
newItem.setFont( QFont( "Times", 12, QFont.Black ) )
tableWidget.setItem(0, 2, newItem)
self.setLayout(conLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Table()
example.show()
sys.exit(app.exec_())
(3)設置單元格的排序方式
# -*- coding: utf-8 -*-
'''
【簡介】
PyQT5中單元格排序
'''
import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem )
from PyQt5.QtCore import Qt
class Table(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget 例子")
self.resize(430, 230);
conLayout = QHBoxLayout()
tableWidget=QTableWidget()
tableWidget.setRowCount(4)
tableWidget.setColumnCount(3)
conLayout.addWidget(tableWidget )
tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])
newItem = QTableWidgetItem("張三")
tableWidget.setItem(0, 0, newItem)
newItem = QTableWidgetItem("男")
tableWidget.setItem(0, 1, newItem)
newItem = QTableWidgetItem("160")
tableWidget.setItem(0, 2, newItem)
newItem = QTableWidgetItem("李四")
tableWidget.setItem(1, 0, newItem)
newItem = QTableWidgetItem("女")
tableWidget.setItem(1, 1, newItem)
newItem = QTableWidgetItem("155")
tableWidget.setItem(1, 2, newItem)
newItem = QTableWidgetItem("王五")
tableWidget.setItem(2, 0, newItem)
newItem = QTableWidgetItem("男")
tableWidget.setItem(2, 1, newItem)
newItem = QTableWidgetItem("170")
tableWidget.setItem(2, 2, newItem)
# Qt.DescendingOrder 降序
# Qt.AscendingOrder 升序
tableWidget.sortItems(2, Qt.DescendingOrder )
self.setLayout(conLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Table()
example.show()
sys.exit(app.exec_())
(4)設置單元格文本的對其方式
# -*- coding: utf-8 -*-
'''
【簡介】
PyQT5中單元格中文本對齊方式例子
'''
import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem )
from PyQt5.QtCore import Qt
class Table(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget 例子")
self.resize(430,230);
conLayout = QHBoxLayout()
tableWidget = QTableWidget()
tableWidget.setRowCount(4)
tableWidget.setColumnCount(3)
conLayout.addWidget(tableWidget )
tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])
newItem = QTableWidgetItem("張三")
newItem.setTextAlignment( Qt.AlignRight| Qt.AlignBottom )
tableWidget.setItem(0, 0, newItem)
newItem = QTableWidgetItem("男")
tableWidget.setItem(0, 1, newItem)
newItem = QTableWidgetItem("160")
tableWidget.setItem(0, 2, newItem)
self.setLayout(conLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Table()
example.show()
sys.exit(app.exec_())
(5)合併單元格效果的實現
# -*- coding: utf-8 -*-
'''
【簡介】
PyQT5中單元格合併例子
'''
import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem )
class Table(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget 例子")
self.resize(430,230 );
conLayout = QHBoxLayout()
tableWidget= QTableWidget()
tableWidget.setRowCount(4)
tableWidget.setColumnCount(3)
conLayout.addWidget(tableWidget )
tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])
tableWidget.setSpan(0, 0, 3, 1)
newItem = QTableWidgetItem("張三")
tableWidget.setItem(0, 0, newItem)
newItem = QTableWidgetItem("男")
tableWidget.setItem(0, 1, newItem)
newItem = QTableWidgetItem("160")
tableWidget.setItem(0, 2, newItem)
self.setLayout(conLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Table()
example.show()
sys.exit(app.exec_())
(6)設置單元格的大小
# -*- coding: utf-8 -*-
'''
【簡介】
PyQT5中單元格的寬度和高度例子
'''
import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem )
class Table(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget 例子")
self.resize(530,300);
conLayout = QHBoxLayout()
tableWidget=QTableWidget()
tableWidget.setRowCount(4)
tableWidget.setColumnCount(3)
conLayout.addWidget(tableWidget )
tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])
newItem = QTableWidgetItem("張三")
tableWidget.setItem(0, 0, newItem)
#將第1列的單元格,設置成150寬度
tableWidget.setColumnWidth(0,150)
#將第1行的單元格,設置成120的高度
tableWidget.setRowHeight(0,120)
newItem = QTableWidgetItem("男")
tableWidget.setItem(0, 1, newItem)
newItem = QTableWidgetItem("160")
tableWidget.setItem(0, 2, newItem)
self.setLayout(conLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Table()
example.show()
sys.exit(app.exec_())
(7)單元格中不顯示分割線
tabelWidget.setShowGrid(False)
tabelWidget.verticalHeader().setVisible(False)
(8)爲單元格添加圖片
# -*- coding: utf-8 -*-
'''
【簡介】
PyQT5中單元格添加圖片例子
'''
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Table( QWidget ):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget 例子")
self.resize(500,300);
conLayout = QHBoxLayout()
self.tableWidget= QTableWidget()
self.tableWidget.setRowCount(5)
self.tableWidget.setColumnCount(4)
conLayout.addWidget(self.tableWidget )
self.tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重', '顯示圖片'])
self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
newItem = QTableWidgetItem("張三")
self.tableWidget.setItem(0, 0, newItem)
newItem = QTableWidgetItem("男")
self.tableWidget.setItem(0, 1, newItem)
newItem = QTableWidgetItem("160")
self.tableWidget.setItem(0, 2, newItem)
newItem = QTableWidgetItem(QIcon("./images/bao1.png"), "揹包")
self.tableWidget.setItem(0, 3, newItem )
self.setLayout(conLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Table()
example.show()
sys.exit(app.exec_())
(9)改變單元格中顯示的圖片大小
# -*- coding: utf-8 -*-
'''
【簡介】
PyQT5中單元格改變每行單元格顯示的圖標大小例子
'''
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Table(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget 例子")
self.resize(1000,900);
conLayout = QHBoxLayout()
table= QTableWidget()
table.setColumnCount(3)
table.setRowCount(5)
table.setHorizontalHeaderLabels(['圖片1','圖片2','圖片3'])
table.setEditTriggers( QAbstractItemView.NoEditTriggers)
table.setIconSize(QSize(300,200));
for i in range(3): # 讓列寬和圖片相同
table.setColumnWidth(i , 300)
for i in range(5): # 讓行高和圖片相同
table.setRowHeight(i , 200)
for k in range(15): # 27 examples of DDA
i = k/3
j = k%3
item = QTableWidgetItem()
item.setFlags(Qt.ItemIsEnabled) #用戶點擊時表格時,圖片被選中
icon = QIcon(r'.\images\bao%d.png' % k )
item.setIcon(QIcon(icon ) )
print('e/icons/%d.png i=%d j=%d' %( k , i , j ) )
table.setItem(i,j,item)
conLayout.addWidget( table)
self.setLayout(conLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Table()
example.show()
sys.exit(app.exec_())
(10)獲取單元格的內容
tableWidget.itemCliked.connect(self.handleItemClick)
def getItem(self, item)
print("you selected => " + item.text())
3、支持右鍵菜單
# -*- coding: utf-8 -*-
'''
【簡介】
PyQT5的表格中支持右鍵菜單例子
'''
import sys
from PyQt5.QtWidgets import ( QMenu , QPushButton, QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem, QHeaderView)
from PyQt5.QtCore import QObject, Qt
class Table( QWidget ):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget 例子")
self.resize(500,300);
conLayout = QHBoxLayout()
self.tableWidget= QTableWidget()
self.tableWidget.setRowCount(5)
self.tableWidget.setColumnCount(3)
conLayout.addWidget(self.tableWidget )
self.tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重' ])
self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
newItem = QTableWidgetItem("張三")
self.tableWidget.setItem(0, 0, newItem)
newItem = QTableWidgetItem("男")
self.tableWidget.setItem(0, 1, newItem)
newItem = QTableWidgetItem("160")
self.tableWidget.setItem(0, 2, newItem)
#表格中第二行記錄
newItem = QTableWidgetItem("李四")
self.tableWidget.setItem(1, 0, newItem)
newItem = QTableWidgetItem("女")
self.tableWidget.setItem(1, 1, newItem)
newItem = QTableWidgetItem("170")
self.tableWidget.setItem(1, 2, newItem)
self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)######允許右鍵產生子菜單
self.tableWidget.customContextMenuRequested.connect(self.generateMenu) ####右鍵菜單
self.setLayout(conLayout)
def generateMenu(self,pos):
#rint( pos)
row_num = -1
for i in self.tableWidget.selectionModel().selection().indexes():
row_num = i.row()
if row_num < 2 :
menu = QMenu()
item1 = menu.addAction(u"選項一")
item2 = menu.addAction(u"選項二")
item3 = menu.addAction(u"選項三" )
action = menu.exec_(self.tableWidget.mapToGlobal(pos))
if action == item1:
print( '您選了選項一,當前行文字內容是:',self.tableWidget.item(row_num,0).text(),self.tableWidget.item(row_num,1).text() ,self.tableWidget.item(row_num,2).text())
elif action == item2:
print( '您選了選項二,當前行文字內容是:',self.tableWidget.item(row_num,0).text(),self.tableWidget.item(row_num,1).text() ,self.tableWidget.item(row_num,2).text() )
elif action == item3:
print( '您選了選項三,當前行文字內容是:', self.tableWidget.item(row_num,0).text(),self.tableWidget.item(row_num,1).text() ,self.tableWidget.item(row_num,2).text() )
else:
return
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Table()
example.show()
sys.exit(app.exec_())