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开发vim插件及心得分享
Nov 04 Python
浅析Python多线程下的变量问题
Apr 28 Python
python中__slots__用法实例
Jun 04 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
Python实现树莓派WiFi断线自动重连的实例代码
Mar 16 Python
答题辅助python代码实现
Jan 16 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 Python
Python 项目转化为so文件实例
Dec 23 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
python/golang实现循环链表的示例代码
Sep 14 Python
Python 调用C++封装的进一步探索交流
Mar 04 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中SQL注入攻击与XSS攻击
2012/06/10 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
php处理复杂xml数据示例
2016/07/11 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
php中的依赖注入实例详解
2019/08/14 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
python中p-value的实现方式
2019/12/16 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
应届大专毕业生自我鉴定
2014/04/08 职场文书
数学教师个人工作总结
2015/02/06 职场文书
领导干部失职检讨书
2015/05/05 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
投诉书格式范本
2015/07/02 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS