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日志模块logging简介
Apr 13 Python
python八大排序算法速度实例对比
Dec 06 Python
5个很好的Python面试题问题答案及分析
Jan 19 Python
pandas 获取季度,月度,年度首尾日期的方法
Apr 11 Python
Python Socket编程之多线程聊天室
Jul 28 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
python系列 文件操作的代码
Oct 06 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
Apr 22 Python
Python日志:自定义输出字段 json格式输出方式
Apr 27 Python
django下创建多个app并设置urls方法
Aug 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
自动跳转中英文页面
2006/10/09 PHP
第五节--克隆
2006/11/16 PHP
PHP伪造referer实例代码
2008/09/20 PHP
PHP的博客ping服务代码
2012/02/04 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
深入php 正则表达式的学习探讨
2013/06/06 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
JavaScript插入动态样式实现代码
2012/02/22 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
编写简单的Python程序来判断文本的语种
2015/04/07 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
2014三八妇女节活动总结
2014/03/01 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
Java8中Stream的一些神操作
2021/11/02 Java/Android
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server
Apache自带的ab压力测试工具的实现
2022/07/23 Servers