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


Posted in Python onFebruary 23, 2020

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 弹出菜单内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python里隐藏的“禅”
Jun 16 Python
Python urllib、urllib2、httplib抓取网页代码实例
May 09 Python
详解Python Socket网络编程
Jan 05 Python
Python简单连接MongoDB数据库的方法
Mar 15 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
详解python uiautomator2 watcher的使用方法
Sep 09 Python
python词云库wordCloud使用方法详解(解决中文乱码)
Feb 17 Python
Python3标准库之dbm UNIX键-值数据库问题
Mar 24 Python
Python使用pyyaml模块处理yaml数据
Apr 14 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
Jun 02 Python
Python requests设置代理的方法步骤
Feb 23 #Python
详解Python修复遥感影像条带的两种方式
Feb 23 #Python
python2 对excel表格操作完整示例
Feb 23 #Python
深入浅析python变量加逗号,的含义
Feb 22 #Python
详解django中Template语言
Feb 22 #Python
Python使用configparser库读取配置文件
Feb 22 #Python
Pytest参数化parametrize使用代码实例
Feb 22 #Python
You might like
PHP的分页功能
2007/03/21 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
JavaScript库 开发规则
2009/01/31 Javascript
js查错流程归纳
2012/05/04 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
JS实现弹出居中的模式窗口示例
2016/06/20 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
python实现随机漫步方法和原理
2019/06/10 Python
python 搜索大文件的实例代码
2019/07/08 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
Python字符串及文本模式方法详解
2020/09/10 Python
Python 多进程、多线程效率对比
2020/11/19 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
高中学生干部学习的自我评价
2014/02/21 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
冰雪公主观后感
2015/06/16 职场文书
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫