PyQt5 QTableWidget
创始人
2024-02-15 20:51:12
0

PyQt5 QTableWidget

  • QTableWidget 示例1
  • QTableWidget 示例2
  • QTableWidget 示例3
  • QTableWidget 示例4
  • QTableWidget 示例5
  • QTableWidget 示例6

在这里插入图片描述

QTableWidget 示例1

演示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_())

在这里插入图片描述

QTableWidget 示例2

添加控件类型条目

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_())

在这里插入图片描述

QTableWidget 示例3

模拟通过鼠标滚轮快速定位到指定项

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_())

在这里插入图片描述

QTableWidget 示例4

设置字体颜色,背景颜色,设置内容字体,排序,隐藏表格头等。

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_())

在这里插入图片描述

QTableWidget 示例5

表格显示图标

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_())

在这里插入图片描述

QTableWidget 示例6

支持右键弹窗菜单

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_())

在这里插入图片描述

相关内容

热门资讯

山东诸城偷排危废致4死案一名主... 山东潍坊诸城市舜王街道一厂房深夜偷排危废,产生硫化氢等大量有毒气体,导致4人死亡、3人重伤以及32人...
男子称在邯郸一超市购买的猪肉检... 近日,河北省邯郸市丛台区一消费者王先生反映,其在阳光超市龙湖店购买的猪肉,食用时感觉有异样。随后,他...
市场监管总局:今年首次以法律形... 市场监管总局副局长柳军23日在专题发布会上介绍,2025年,全国食品安全形势总体平稳。市场监管总局坚...
关于健全对刑事案件犯罪嫌疑人、... “两高一部”发布《关于健全对刑事案件犯罪嫌疑人、被告人身份审查工作机制的意见》 为准确、及时查明案件...
完善幼儿园收费政策 三部门发通... 中新网12月23日电 据国家发展和改革委员会网站消息,23日,国家发展改革委、教育部、财政部发布关于...
男子4年强奸继女六七十次,被判... 日前,河北省石家庄市栾城区人民法院在中国裁判文书网公开了一份刑事判决书,男子刘冬(化名)在4年间竟六...
合肥一烤肉店回应宠物狗上桌吃饭... 12月22日,安徽合肥一家烤肉店有宠物狗上桌吃饭,餐桌上的餐盘里放有食物,宠物狗在不断啃食生肉。 2...
中国人民银行关于实施一次性信用... 中国人民银行上海总部,各省、自治区、直辖市及计划单列市分行,征信中心;国家开发银行,各政策性银行、国...
徐杰20分萨林杰32+11 广... 【搜狐体育战报】北京时间12月23日CBA常规赛第5轮,客场作战的广东东阳光以93-85击败广州朗肽...
完善幼儿园收费政策,三部门发通... 今天(12月23日),国家发展改革委、教育部、财政部发布关于完善幼儿园收费政策的通知,全文如下: 各...