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 相关文章推荐
python3之微信文章爬虫实例讲解
Jul 12 Python
浅析Git版本控制器使用
Dec 10 Python
Python设计模式之代理模式简单示例
Jan 09 Python
让Django支持Sql Server作后端数据库的方法
May 29 Python
python 读写文件,按行修改文件的方法
Jul 12 Python
windows下python 3.6.4安装配置图文教程
Aug 21 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
python实现电子产品商店
Feb 26 Python
python的命名规则知识点总结
Oct 04 Python
解决python图像处理图像赋值后变为白色的问题
Jun 04 Python
Python爬虫实现自动登录、签到功能的代码
Aug 20 Python
深度学习详解之初试机器学习
Apr 14 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使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
php is_writable判断文件是否可写实例代码
2016/10/13 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
js post方式传递提交的实现代码
2010/05/31 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
在Python中使用SQLite的简单教程
2015/04/29 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
节约用水演讲稿
2014/05/21 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
个人年底工作总结
2015/03/10 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
SQL SERVER中的流程控制语句
2022/05/25 SQL Server