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 相关文章推荐
使用IPython下的Net-SNMP来管理类UNIX系统的教程
Apr 15 Python
python 设置文件编码格式的实现方法
Dec 21 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
Odoo中如何生成唯一不重复的序列号详解
Feb 10 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
用Django写天气预报查询网站
Oct 21 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
Tornado实现多进程/多线程的HTTP服务详解
Jul 25 Python
Python AutoCAD 系统设置的实现方法
Apr 01 Python
Python 如何实现数据库表结构同步
Sep 29 Python
python查询MySQL将数据写入Excel
Oct 29 Python
Python实现Excel自动分组合并单元格
Feb 22 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+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
python 实现归并排序算法
2012/06/05 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
Python分治法定义与应用实例详解
2017/07/28 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
2020/06/03 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
HTML5图片预览实例分享
2014/06/04 HTML / CSS
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
戴尔英国官网:Dell英国
2017/05/27 全球购物
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
2013年员工自我评价范文
2013/12/27 职场文书
培训讲师邀请函
2014/01/10 职场文书
母亲80寿诞答谢词
2014/01/16 职场文书
清扬洗发水广告词
2014/03/14 职场文书
旷课检讨书500字
2014/10/14 职场文书
杭白菊导游词
2015/02/10 职场文书
安全学习心得体会范文
2016/01/18 职场文书
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers