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设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
使用pyecharts无法import Bar的解决方案
Apr 23 Python
python中列表和元组的区别
Dec 18 Python
python实现简易数码时钟
Feb 19 Python
python实现转圈打印矩阵
Mar 02 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
PyTorch的深度学习入门之PyTorch安装和配置
Jun 27 Python
python实现京东订单推送到测试环境,提供便利操作示例
Aug 09 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
Feb 19 Python
python脚本框架webpy模板控制结构
Nov 20 Python
一起来学习Python的元组和列表
Mar 13 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
中国的第一台收音机
2021/03/01 无线电
php 应用程序安全防范技术研究
2009/09/25 PHP
解析php dirname()与__FILE__常量的应用
2013/06/24 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
Yii2框架可逆加密简单实现方法
2017/08/25 PHP
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
安装Python的教程-Windows
2017/07/22 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
Python subprocess模块常见用法分析
2018/06/12 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
Python列表推导式实现代码实例
2020/09/09 Python
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
初中政治教学反思
2014/01/17 职场文书
小班上学期评语
2014/05/05 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
大学迎新生标语
2014/10/06 职场文书
2014年平安夜寄语
2014/12/08 职场文书
电信营业员岗位职责
2015/04/14 职场文书