PyQt5 QTableWidget

news2025/7/19 12:22:41

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 Qt

class 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.AlignBaseline


        newItem = 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 Qt

class 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 sys

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

class 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 Qt

class 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/3
            j = k%3
            item = 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)
        #将右键菜单绑定到槽函数generateMenu
        self.tableWidget.customContextMenuRequested.connect(self.generateMenu)
        self.setLayout(conLayout)


    def generateMenu(self, 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)
    win = Table()
    win.show()
    sys.exit(app.exec_())

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

The Seven Tools of Causal Inference with Reflections on Machine Learning 文章解读

目录 THE THREE LAYER CAUSAL HIERARCHY. 4 THE SEVEN TOOLS OF CAUSAL INFERENCE (OR WHAT YOU CAN DO WITH A CAUSAL MODEL THAT YOU COULD NOT DO WITHOUT?) 7 Tool 1: Encoding Causal Assumptions – Transparency and Testability. 10 Tool 2: Do-calculus and the …

CentOS 7:dmPython安装及测试连接达梦数据库

python下载地址&#xff1a;Python Source Releases | Python.org 查看数据库服务 dmPython 安装 cd /home/dmdba/dmdbms/drivers/python/dmPython python setup.py install [rootlocalhost dmPython]# python setup.py install running install running bdist_egg running e…

通过Python Pandas分析数据上涨下跌趋势的方法:求离散数据的差分、导数

在实际工作中&#xff0c;我们经常需要分析一组数据的历史走势/趋势情况&#xff0c;比如要从产品数据库中筛选出销量处于上升趋势的产品&#xff0c;或者从股票历史数据库中筛选出一直处于上涨的股票。 那么可以通过分析计算该组数据的差分来模拟求出该组数据走势线的导数&…

Kubernetes CKA 模拟题解析【2022最新版】(连载001)

练习准备 这是 Kubernetes CKA 认证的模拟考试&#xff0c;大家不要错过哦。 在模拟考试开始之前建议您先设置一下以下命令&#xff1a; $ alias kkubectl $ export do"--dry-runclient -o yaml" # like short for dry output. use whatever you like 设置代码补…

Lumion和Enscape渲染器有什么区别?哪个适合你

提到“傻瓜式渲染器”&#xff0c;你的脑子里最先闪过哪个软件名&#xff1f;当一溜子软件名在脑袋里飞快跳转的时候&#xff0c;有没有发现现在很多软件都被打上“傻瓜式渲染器”的标签&#xff1f;那今天咱们就先聊一聊Lumion和Enscape这两个知名软件。 01、软件介绍 Lumio…

DOTA-PEG-麦芽糖 maltose-DOTA 麦芽糖-四氮杂环十二烷四乙酸

DOTA-PEG-麦芽糖 maltose-DOTA 麦芽糖-四氮杂环十二烷四乙酸 PEG接枝修饰麦芽糖&#xff0c;麦芽糖-聚乙二醇-四氮杂环十二烷四乙酸&#xff0c;DOTA-PEG-麦芽糖 中文名称&#xff1a;麦芽糖-四氮杂环十二烷四乙酸 英文名称&#xff1a;maltose-DOTA 别称&#xff1a;DOTA修…

浏览器渲染原理-通俗易懂版本

文章目录浏览器渲染原理前言1. 网页的解析过程2. 浏览器的功能与组成2.1 浏览器内核2.2 进程与线程3. 浏览器渲染流程3.1 渲染引擎解析过程3.2 渲染引擎主要模块4. 渲染页面的详细流程4.1 HTML 解析过程4.2 生成 CSS 规则4.3 构建 Render Tree4.4 布局 (layout) 和绘制 (Paint)…

外观专利怎么申请?

问题一&#xff1a;什么是外观专利&#xff1f; 外观专利跟实用新型专利和发明专利有所不同。实用新型和发明主要保护的技术方案或者方法&#xff0c;配方。而外观专利保护的产品的形状、图案或其结合以及色彩富有美感&#xff0c;并且适用于工业应用的新设计。比如某企业推出…

华为“仓颉”不是中文编程,中文编程早有所属,势如破竹

“中国自己的编程语言究竟在哪里&#xff1f;”关心IT生态的我们&#xff0c;经常深思与担忧。 语言是文化精髓所在&#xff0c;一方水土养一方人&#xff0c;不管是中文&#xff0c;还是英语&#xff0c;作为交流工具&#xff0c;语言烙印着不同地方的生活场景&#xff0c;一方…

[附源码]计算机毕业设计JAVA企业公开招聘系统

[附源码]计算机毕业设计JAVA企业公开招聘系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

Mybatis-plus通过exists判断记录是否存在

Mybatis-plus通过exists判断记录是否存在一、Controller二、Service三、效果一、Controller GetMapping("/queryNewProductExists")public Boolean queryNewProductExists(RequestParam("name") String name) {return opProductService.queryNewProductExi…

开源游戏服务器框架NoahGameFrame(NF)客户端的Log日志系统(五)

一、调用输出日志方法所在的脚本介绍 需要打印日志到文件或者Unity的Console控制台中&#xff0c;就可以调用NFLogModule.cs这个脚本中的方法。由于这个脚本中的方法数量太多&#xff0c;我就不一一介绍了&#xff0c;有需要的可以自己看下具体的实现过程。下面篇幅介绍中作者…

电机与拖动(1)直流电机

磁路中的常用定律 电磁力定律是电动机的理论基础&#xff0c;用左手定则。 电磁感应定律是我们发电机的理论基础&#xff0c;用右手定则 。 与电路的比较&#xff1a; 直流电机 右手定则&#xff1a;伸开右手&#xff0c;使大拇指跟其余四个手指垂直并且都跟手掌在一个平面…

关于WEB端实现电子海图之Openlayers加载切片

记笔记&#xff0c;免忘记&#xff01; 关于WEB端实现电子海图研究之思路 关于WEB端实现电子海图研究二GeoServer GeoServer完成shp文件切矢量图后&#xff0c;我们需要加载GeoServer切片在web上展示。 vector-tiles-tutorial官方示例 以下示例使用openLayers来加载 D:\s…

status_breakpoint谷歌浏览器如何解决?

众所周知&#xff0c;谷歌浏览器是一款非常好用的浏览器软件&#xff0c;但是在使用过程中难免会遇到一些问题&#xff0c;比如status_breakpoint错误代码该怎么办&#xff1f;下面就来看看小编整理的status_breakpoint谷歌浏览器相关内容。 一些可能导致谷歌浏览器status_brea…

【数据结构】堆及堆排序的实现(C语言)

目录 前言 初始化 增删 由一个数组构建堆 堆排序 TOPK问题 前言 我们都知道二叉树是度为 2 的树&#xff0c;如果在一个完全二叉树里&#xff0c;所有的子结点都小于他的父结点&#xff0c;那么它就是堆。这样的堆被称之为大堆&#xff0c;反之则称为小堆。 虽然我们画出…

光学测量精度极限—光谱共焦位移传感器的六大行业应用

科技的不断发展&#xff0c;在半导体&#xff0c;高精密制造领域中都是采用微米及以上的加工工艺&#xff0c;并与之匹配高精度测量技术进行品质控制。光谱共焦的测量原理是一束白光经过镜头将不同的波长聚焦到光轴上&#xff0c;色散地形成一条彩虹状分布带&#xff0c;照射到…

第五章:LockSupport与线程中断

阿里蚂蚁金服面试题什么是线程中断机制&#xff1f;中断相关的 API 方法面试题1、如果停止正在运行的一个线程&#xff1f;2 当前线程的中断标识为true&#xff0c;是不是线程就立刻停止&#xff1f;案例一案例二3、静态方法Thread.interrupted()&#xff0c;谈谈你的理解总结L…

国外服务器采取数据备份和灾难恢复的重要性

在国外服务器的使用中&#xff0c;数据的安全性和完整性是任何组织都不能忽视的问题。丢失数据可能会对业务造成毁灭性的影响&#xff0c;因此必须有一个完善的数据备份和灾难恢复计划。 什么是备份? 备份将数据复制到辅助形式&#xff0c;如存档文件&#xff0c;在灾难发生时…

网络安全:SQL盲注概述

目录 盲SQL注入 什么是盲SQL注入&#xff1f; 通过触发条件响应来利用盲SQL注入 通过触发 SQL 错误来诱导条件响应 通过触发时间延迟来利用盲 SQL 注入 使用带外 &#xff08;OAST&#xff09; 技术利用盲 SQL 注入 如何防止SQL注入 二阶 SQL 注入 特定于数据库的因素…