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 相关文章推荐
python3实现抓取网页资源的 N 种方法
May 02 Python
Python实现句子翻译功能
Nov 14 Python
python十进制和二进制的转换方法(含浮点数)
Jul 07 Python
python实现统计文本中单词出现的频率详解
May 20 Python
浅析Python语言自带的数据结构有哪些
Aug 27 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
Django通过dwebsocket实现websocket的例子
Nov 15 Python
解决django后台管理界面添加中文内容乱码问题
Nov 15 Python
Python 函数绘图及函数图像微分与积分
Nov 20 Python
通过实例简单了解python yield使用方法
Aug 06 Python
python代码实现扫码关注公众号登录的实战
Nov 01 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 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中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
php中define用法实例
2015/07/30 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
vue实现分页栏效果
2019/06/28 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
python同时给两个收件人发送邮件的方法
2015/04/30 Python
Python2中文处理纪要的实现方法
2018/03/10 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
Python中sorted()排序与字母大小写的问题
2020/01/14 Python
python 实现两个npy档案合并
2020/07/01 Python
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
感恩节红领巾广播稿
2014/02/11 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
政风行风评议心得体会
2014/10/21 职场文书
简短清晨问候语
2015/11/10 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
2021/05/25 Python
Golang 遍历二叉树
2022/04/19 Golang