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实现的石头剪子布代码分享
Aug 22 Python
关于numpy中np.nonzero()函数用法的详解
Feb 07 Python
Python实现统计代码行的方法分析
Jul 12 Python
如何在python中使用selenium的示例
Dec 26 Python
使用python读取txt文件的内容,并删除重复的行数方法
Apr 18 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
Aug 02 Python
使用GitHub和Python实现持续部署的方法
May 09 Python
django框架auth模块用法实例详解
Dec 10 Python
使用tensorboard可视化loss和acc的实例
Jan 21 Python
Python切割图片成九宫格的示例代码
Mar 10 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
python中if嵌套命令实例讲解
Feb 25 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取得一个类的属性和方法的实现代码
2011/05/22 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
php微信开发接入
2016/08/27 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
从零学Python之入门(五)缩进和选择
2014/05/27 Python
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
python实现redis三种cas事务操作
2017/12/19 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
完美的中文自荐信
2014/05/24 职场文书
简单租房协议书
2014/10/21 职场文书
小学毕业感言200字
2015/07/30 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
python分分钟绘制精美地图海报
2022/02/15 Python
Python读取和写入Excel数据
2022/04/20 Python