演示QTableWidget控件的基本使用方法
import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QTableWidgetItem, QHBoxLayout, QApplication, QAbstractItemView, QHeaderView)
from PyQt5.QtCore import Qtclass Table(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("QTableWidget Demo")self.resize(400, 300)conLayout = QHBoxLayout()tableWidget = QTableWidget()tableWidget.setRowCount(4)tableWidget.setColumnCount(3)conLayout.addWidget(tableWidget)# 设置行标题tableWidget.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])# 设置列标题tableWidget.setVerticalHeaderLabels(['行1','行2','行3','行4'])# 设置水平方向自适应伸缩模式tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)# 将行和列的宽度,高度设置为与所显示的内容的宽度,高度相匹配tableWidget.resizeColumnsToContents()tableWidget.resizeRowsToContents()# 隐藏表格的表头# tableWidget.horizontalHeader().setVisible(False)# tableWidget.verticalHeader().setVisible(False)# 设置编辑规则tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)# QAbstractItemView.NoEditTriggers# QAbstractItemView.CurrentChanged# QAbstractItemView.DoubleClicked# QAbstractItemView.SelectedClicked# QAbstractItemView.EditKeyPressed# QAbstractItemView.AnyKeyPressed# QAbstractItemView.AllEditTriggers# 设置选择行为tableWidget.setSelectionBehavior(QAbstractItemView.SelectItems)# QAbstractItemView.SelectItems# QAbstractItemView.SelectRows# QAbstractItemView.SelectColumns# Qt.AlignLeft# Qt.AlignRight# Qt.AlignHCenter# Qt.AlignJustify# Qt.AlignTop# Qt.AlignBottom# Qt.AlignVCenter# Qt.AlignBaselinenewItem = QTableWidgetItem("张三") tableWidget.setItem(0, 0, newItem)newItem.setTextAlignment(Qt.AlignLeft)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)win = Table()win.show()sys.exit(app.exec_())
添加控件类型条目
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qtclass MyTableWidget(QWidget):def __init__(self, parent=None):super(MyTableWidget, self).__init__(parent)self.initUI()def initUI(self):self.setWindowTitle("QTableWidget Demo 2")self.resize(300, 200)layout = QHBoxLayout()tableWidget = QTableWidget()tableWidget.setRowCount(4)tableWidget.setColumnCount(3)tableWidget.setHorizontalHeaderLabels(['一','二','三'])newItem = QTableWidgetItem("Java")tableWidget.setItem(0,0, newItem)comBox = QComboBox()comBox.addItem("男")comBox.addItem("女")comBox.setStyleSheet("QComboBox{margin:3px};")tableWidget.setCellWidget(0,1, comBox)modifyBtn = QPushButton("修改")modifyBtn.setStyleSheet("QPushButton{margin:3px};")tableWidget.setCellWidget(0, 2, modifyBtn)# item = tableWidget.findItems("Java", Qt.MatchExactly)# row = item[0].row()# tableWidget.verticalScrollBar().setSliderPosition(2)layout.addWidget(tableWidget)self.setLayout(layout)if __name__ == "__main__":app = QApplication(sys.argv)win = MyTableWidget()win.show()sys.exit(app.exec_())
模拟通过鼠标滚轮快速定位到指定项
import sysfrom PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qtclass Table(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("QTableWidget Demo 3")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)# 遍历表格查找对应项text = "(10,1)"items = tableWidget.findItems(text, Qt.MatchExactly)item = items[0]# 选中单元格#item.setSelected(True)# 设置字体为红色item.setForeground(QBrush(QColor(255, 0, 0)))row = item.row()# 模拟通过鼠标滚轮快速定位到指定项tableWidget.verticalScrollBar().setSliderPosition(row)if __name__ == "__main__":app = QApplication(sys.argv)win = Table()win.show()sys.exit(app.exec_())
设置字体颜色,背景颜色,设置内容字体,排序,隐藏表格头等。
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qtclass Table(QWidget):def __init__(self):super().__init__()self.setWindowTitle("QWidget Demo 3")layout = QHBoxLayout()tableWidget = QTableWidget()tableWidget.setRowCount(10)tableWidget.setColumnCount(3)tableWidget.setRowHeight(0, 100)tableWidget.setColumnWidth(0, 50)tableWidget.setShowGrid(False)tableWidget.verticalHeader().setVisible(False)# 设置 前景,背景颜色newItem = QTableWidgetItem("张三")newItem.setForeground(QBrush(QColor(255, 0, 0)))newItem.setBackground(QBrush(QColor(0, 255, 0)))tableWidget.setItem(0, 0, newItem)# 设置字体newItem = QTableWidgetItem("男")newItem.setFont(QFont("Times", 16, QFont.Black))tableWidget.setItem(0, 1, newItem)newItem = QTableWidgetItem("160")newItem.setFont(QFont("times", 12, QFont.Bold))tableWidget.setItem(0, 2, newItem)# Qt.DescendingOrder 降序# Qt.AscendingOrder 升序newItem = QTableWidgetItem("李四")tableWidget.setItem(1,0, newItem)newItem = QTableWidgetItem("男")tableWidget.setItem(1, 1, newItem)newItem = QTableWidgetItem("172")tableWidget.setItem(1, 2, newItem)newItem = QTableWidgetItem("小红")tableWidget.setItem(2, 0, newItem)newItem = QTableWidgetItem("女")tableWidget.setItem(2, 1, newItem)newItem = QTableWidgetItem("150")tableWidget.setItem(2, 2, newItem)# 第3列 按升序排序tableWidget.sortItems(2, Qt.DescendingOrder)layout.addWidget(tableWidget)self.setLayout(layout)if __name__ == "__main__":app = QApplication(sys.argv)win = Table()win.show()sys.exit(app.exec_())
表格显示图标
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt# 新手class Table(QWidget):def __init__(self, parent=None):super(Table, self).__init__(parent)self.setWindowTitle("QWidget 显示图片")self.initUI()def initUI(self):layout = QHBoxLayout()tableWidget = QTableWidget()tableWidget.setColumnCount(3)tableWidget.setRowCount(5)tableWidget.setHorizontalHeaderLabels(['图片1', '图片2', '图片3'])tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)tableWidget.setIconSize(QSize(300, 200))for i in range(3): # 让列宽和图片相同tableWidget.setColumnWidth(i, 300)for i in range(5):tableWidget.setRowHeight(i, 200)for k in range(15):i = k/3j = k%3item = QTableWidgetItem()item.setFlags(Qt.ItemIsEnabled) # 用户点击表格时,图片被选中icon = QIcon(r'D:\project\python\pyqt5\advance_high\images\bao%d.png' % k)# icon = QIcon(r'D:\project\python\pyqt5\advance_high\images\bao0.png')item.setIcon(QIcon(icon))tableWidget.setItem(i, j, item)tableWidget.itemClicked.connect(self.handleItemClick)layout.addWidget(tableWidget)self.setLayout(layout)def handleItemClick(self, item):print('you selected => ', item.row(), item.column())if __name__ == "__main__":app = QApplication(sys.argv)win = Table()win.show()sys.exit(app.exec_())
支持右键弹窗菜单
import sys
from PyQt5.QtWidgets import (QMenu, QPushButton, QWidget, QTableWidget, QTableWidgetItem,QHBoxLayout, QApplication, QDesktopWidget, QHeaderView)
from PyQt5.QtCore import pyqtSignal, QObject, pyqtSlot
from PyQt5.QtCore import Qt# 支持右键弹窗菜单class Table(QWidget):def __init__(self, parent=None):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("QTableWidget Demo 6")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)#将右键菜单绑定到槽函数generateMenuself.tableWidget.customContextMenuRequested.connect(self.generateMenu)self.setLayout(conLayout)def generateMenu(self, pos):row_num = -1for 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:returnif __name__ == "__main__":app = QApplication(sys.argv)win = Table()win.show()sys.exit(app.exec_())
下一篇:碎碎念日常——一个反思日记