PyQt5中QTableWidget如何弹出菜单的示例代码

 更新时间:2020年02月23日 14:54:41   作者:qq_45690024  
这篇文章主要介绍了PyQt5中QTableWidget如何弹出菜单的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

QTableWidget是Qt程序中常用的显示数据表格的控件,类似于c#中的DataGrid。QTableWidget是QTableView的子类,它使用标准的数据模型,并且其单元数据是通过QTableWidgetItem对象来实现的,使用QTableWidget时就需要QTableWidgetItem。用来表示表格中的一个单元格,整个表格就是用各个单元格构建起来的

在PyQt5中,常需要对表格进行右击后弹出菜单,要实现这个操作就是两个问题:1. 如何弹出菜单。2. 如何在满足条件的情况下弹出菜单

在本文中简要介绍了一个方法来解决这个问题(附在代码中,大约从第60行开始)

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

'''
如何弹出菜单
如何在满足条件的情况下弹出菜单
'''
class TableWidgetContextMenu(QWidget):
  def __init__(self):
    super(TableWidgetContextMenu, self).__init__()
    self.initUI()

  def initUI(self):
    self.setWindowTitle("在表格中显示上下文菜单")
    self.resize(500, 300)
    layout = QHBoxLayout()

    self.tableWidget = QTableWidget()
    self.tableWidget.setRowCount(5)
    self.tableWidget.setColumnCount(3)

    layout.addWidget(self.tableWidget)

    self.tableWidget.setHorizontalHeaderLabels(['姓名', '性别', '年龄'])

    # 第一行
    Item1 = QTableWidgetItem("老王")
    self.tableWidget.setItem(0, 0, Item1)

    Item2 = QTableWidgetItem("男")
    self.tableWidget.setItem(0, 1, Item2)

    Item3 = QTableWidgetItem("30")
    self.tableWidget.setItem(0, 2, Item3)

    # 第二行
    Item1 = QTableWidgetItem("小王")
    self.tableWidget.setItem(1, 0, Item1)

    Item2 = QTableWidgetItem("男")
    self.tableWidget.setItem(1, 1, Item2)

    Item3 = QTableWidgetItem("28")
    self.tableWidget.setItem(1, 2, Item3)

    # 第三行
    Item1 = QTableWidgetItem("小红")
    self.tableWidget.setItem(2, 0, Item1)

    Item2 = QTableWidgetItem("女")
    self.tableWidget.setItem(2, 1, Item2)

    Item3 = QTableWidgetItem("18")
    self.tableWidget.setItem(2, 2, Item3)

    # 允许弹出菜单
    self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)

    # 将信号请求连接到槽(单击鼠标右键,就调用方法)
    self.tableWidget.customContextMenuRequested.connect(self.generateMenu)

    self.setLayout(layout)

  # pos为点击的位置
  def generateMenu(self, pos):
    print(pos)
    # 得到索引
    for i in self.tableWidget.selectionModel().selection().indexes():
      rowNum = i.row()

    # 如果选择的行索引小于1,弹出上下文菜单
    if rowNum < 3:
      menu = QMenu()
      item1 = menu.addAction("菜单1")
      item2 = menu.addAction("菜单2")
      item3 = menu.addAction("菜单3")
      # 使菜单在正常位置显示
      screenPos = self.tableWidget.mapToGlobal(pos)

      # 单击一个菜单项就返回,使之被阻塞
      action = menu.exec(screenPos)
      if action == item1:
        print('选择菜单1', self.tableWidget.item(rowNum, 0).text())
      if action == item2:
        print('选择菜单2', self.tableWidget.item(rowNum, 0).text())
      if action == item3:
        print('选择菜单3', self.tableWidget.item(rowNum, 0).text())
      else:
        return



if __name__ == "__main__":
  app = QApplication(sys.argv)
  main = TableWidgetContextMenu()
  main.show()
  sys.exit(app.exec_())

到此这篇关于PyQt5中QTableWidget如何弹出菜单的示例代码的文章就介绍到这了,更多相关PyQt5 QTableWidget 弹出菜单内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • drf-router和authenticate认证源码分析

    drf-router和authenticate认证源码分析

    在 Rest Framework 中提供了两个 router , 可以帮助我们快速的实现路由的自动生成,本文通过实例代码给大家介绍drf-router和authenticate认证源码分析,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • python实现不同文件夹下的函数相互调用

    python实现不同文件夹下的函数相互调用

    这篇文章主要介绍了python实现不同文件夹下的函数相互调用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 详解Python匿名函数(lambda函数)

    详解Python匿名函数(lambda函数)

    这篇文章主要介绍了Python匿名函数(lambda函数),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Python colorama 彩色打印实现代码

    Python colorama 彩色打印实现代码

    这篇文章主要介绍了Python colorama 彩色打印实现代码,将介绍的类为Back, 它实现了与 Fore 类相同的九个关键字:BLACK、RED、GREEN、YELLOW、BLUE、MAGENTA、CYAN、WHITE、RESET,感兴趣的朋友一起看看吧
    2022-04-04
  • python 第三方库paramiko的常用方式

    python 第三方库paramiko的常用方式

    这篇文章主要介绍了python 第三方库paramiko的常用方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 深入了解Python装饰器的高级用法

    深入了解Python装饰器的高级用法

    这篇文章主要介绍了Python装饰器的高级用法,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • 独立进程使用django模型及django.setup()使用

    独立进程使用django模型及django.setup()使用

    这篇文章主要介绍了独立进程使用django模型(django.setup()使用),它提供了一种简单且高效的方式来利用Django强大的功能,并使你的代码更易于维护和扩展,需要的朋友可以参考下
    2023-07-07
  • python处理json字符串(使用json.loads而不是eval())

    python处理json字符串(使用json.loads而不是eval())

    eval 跟json.loads 是不一样的函数,是有实现不一样功能的地方,但是在某些地方它们两个函数的功能是一样的,本文就详细介绍一下
    2021-09-09
  • Python实现的简单dns查询功能示例

    Python实现的简单dns查询功能示例

    这篇文章主要介绍了Python实现的简单dns查询功能,结合实例形式分析了Python基于socket模块的dns信息查询实现技巧,需要的朋友可以参考下
    2017-05-05
  • Python利用雪花算法实现生成唯一ID

    Python利用雪花算法实现生成唯一ID

    雪花算法是在一个项目体系中生成全局唯一ID标识的一种方式,偶然间看到了Python使用雪花算法不尽感叹真的是太便捷了。本文就来聊聊这具体的实现方法,感兴趣的可以了解一下
    2022-11-11

最新评论