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 相关文章推荐
Windows8下安装Python的BeautifulSoup
Jan 22 Python
Python中字符串的修改及传参详解
Nov 30 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
Python常见数据结构之栈与队列用法示例
Jan 14 Python
利用python开发app实战的方法
Jul 09 Python
解决python3 安装不了PIL的问题
Aug 16 Python
三个python爬虫项目实例代码
Dec 28 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 03 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 Python
详解Python常用的魔法方法
Jun 03 Python
Python自动化工具之实现Excel转Markdown表格
Apr 08 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 empty函数 使用说明
2009/08/10 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
Node.js编程中客户端Session的使用详解
2015/06/23 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
2020/04/16 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
经销商会议欢迎词
2014/01/11 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
副董事长岗位职责
2014/04/02 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
综合办公室岗位职责
2015/04/11 职场文书
初中家长意见
2015/06/03 职场文书
运动会班级前导词
2015/07/20 职场文书