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 相关文章推荐
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
Jan 19 Python
Python的动态重新封装的教程
Apr 11 Python
Python中类型关系和继承关系实例详解
May 25 Python
python实现对excel进行数据剔除操作实例
Dec 07 Python
Django使用httpresponse返回用户头像实例代码
Jan 26 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
Python中的Django基本命令实例详解
Jul 15 Python
python 将列表中的字符串连接成一个长路径的方法
Oct 23 Python
python给微信好友定时推送消息的示例
Feb 20 Python
python 画出使用分类器得到的决策边界
Aug 21 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
Jupyter Notebook安装及使用方法解析
Nov 12 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/02 无线电
一些常用的php简单命令代码集锦
2007/09/24 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
php中error与exception的区别及应用
2014/07/28 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
微信小程序异步处理详解
2017/11/10 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
详解python之简单主机批量管理工具
2017/01/27 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
基于python实现简单日历
2018/07/28 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
Python箱型图处理离群点的例子
2019/12/09 Python
Python之变量类型和if判断方式
2020/05/05 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
美国在线工具商店:Acme Tools
2018/06/26 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
给领导的致歉信范文
2014/01/13 职场文书
幼儿园教师请假制度
2014/01/16 职场文书
禁烟标语大全
2014/06/11 职场文书
家长会标语
2014/06/24 职场文书
导师工作推荐信
2015/03/27 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
高中生物教学反思
2016/02/20 职场文书
导游词之青城山景区
2019/09/27 职场文书