第二十五篇 -- QTreeWidget右击菜单的实现
效果图:
自己画一个ui,如图,前面已经讲过怎么用Qt Designer画图了,现在就不赘述了。
ui_play.py
- # -*- coding: utf-8 -*-
- # Form implementation generated from reading ui file 'ui_play2.ui'
- #
- # Created by: PyQt5 UI code generator 5.13.0
- #
- # WARNING! All changes made in this file will be lost!
- from PyQt5 import QtCore, QtGui, QtWidgets
- class Ui_Form(object):
- def setupUi(self, Form):
- Form.setObjectName("Form")
- Form.resize(422, 375)
- self.treeWidget = QtWidgets.QTreeWidget(Form)
- self.treeWidget.setGeometry(QtCore.QRect(10, 10, 401, 351))
- self.treeWidget.setObjectName("treeWidget")
- self.treeWidget.headerItem().setTextAlignment(0, QtCore.Qt.AlignCenter)
- font = QtGui.QFont()
- font.setPointSize(14)
- font.setBold(True)
- font.setWeight(75)
- self.treeWidget.headerItem().setFont(0, font)
- self.treeWidget.headerItem().setBackground(0, QtGui.QColor(170, 255, 0))
- brush = QtGui.QBrush(QtGui.QColor(170, 85, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- self.treeWidget.headerItem().setForeground(0, brush)
- self.treeWidget.headerItem().setTextAlignment(1, QtCore.Qt.AlignCenter)
- font = QtGui.QFont()
- font.setPointSize(14)
- font.setBold(True)
- font.setWeight(75)
- self.treeWidget.headerItem().setFont(1, font)
- self.treeWidget.headerItem().setBackground(1, QtGui.QColor(170, 255, 127))
- brush = QtGui.QBrush(QtGui.QColor(170, 85, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- self.treeWidget.headerItem().setForeground(1, brush)
- item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(0, brush)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(1, brush)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(0, brush)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(1, brush)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(0, brush)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(1, brush)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(0, brush)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(1, brush)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(0, brush)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(1, brush)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(0, brush)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(1, brush)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(0, brush)
- brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
- brush.setStyle(QtCore.Qt.SolidPattern)
- item_0.setBackground(1, brush)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- item_1 = QtWidgets.QTreeWidgetItem(item_0)
- self.retranslateUi(Form)
- QtCore.QMetaObject.connectSlotsByName(Form)
- def retranslateUi(self, Form):
- _translate = QtCore.QCoreApplication.translate
- Form.setWindowTitle(_translate("Form", "Form"))
- self.treeWidget.headerItem().setText(0, _translate("Form", "姓名"))
- self.treeWidget.headerItem().setText(1, _translate("Form", "信息"))
- __sortingEnabled = self.treeWidget.isSortingEnabled()
- self.treeWidget.setSortingEnabled(False)
- self.treeWidget.topLevelItem(0).setText(0, _translate("Form", "张三"))
- self.treeWidget.topLevelItem(0).child(0).setText(0, _translate("Form", "性别"))
- self.treeWidget.topLevelItem(0).child(0).setText(1, _translate("Form", "男"))
- self.treeWidget.topLevelItem(0).child(1).setText(0, _translate("Form", "年龄"))
- self.treeWidget.topLevelItem(0).child(1).setText(1, _translate("Form", "18"))
- self.treeWidget.topLevelItem(0).child(2).setText(0, _translate("Form", "爱好"))
- self.treeWidget.topLevelItem(0).child(2).setText(1, _translate("Form", "LOL"))
- self.treeWidget.topLevelItem(1).setText(0, _translate("Form", "李四"))
- self.treeWidget.topLevelItem(1).child(0).setText(0, _translate("Form", "性别"))
- self.treeWidget.topLevelItem(1).child(0).setText(1, _translate("Form", "男"))
- self.treeWidget.topLevelItem(1).child(1).setText(0, _translate("Form", "年龄"))
- self.treeWidget.topLevelItem(1).child(1).setText(1, _translate("Form", "20"))
- self.treeWidget.topLevelItem(1).child(2).setText(0, _translate("Form", "爱好"))
- self.treeWidget.topLevelItem(1).child(2).setText(1, _translate("Form", "DOTA"))
- self.treeWidget.topLevelItem(2).setText(0, _translate("Form", "王五"))
- self.treeWidget.topLevelItem(2).child(0).setText(0, _translate("Form", "性别"))
- self.treeWidget.topLevelItem(2).child(0).setText(1, _translate("Form", "男"))
- self.treeWidget.topLevelItem(2).child(1).setText(0, _translate("Form", "年龄"))
- self.treeWidget.topLevelItem(2).child(1).setText(1, _translate("Form", "22"))
- self.treeWidget.topLevelItem(2).child(2).setText(0, _translate("Form", "爱好"))
- self.treeWidget.topLevelItem(2).child(2).setText(1, _translate("Form", "麻将"))
- self.treeWidget.topLevelItem(3).setText(0, _translate("Form", "芳芳"))
- self.treeWidget.topLevelItem(3).child(0).setText(0, _translate("Form", "性别"))
- self.treeWidget.topLevelItem(3).child(0).setText(1, _translate("Form", "女"))
- self.treeWidget.topLevelItem(3).child(1).setText(0, _translate("Form", "年龄"))
- self.treeWidget.topLevelItem(3).child(1).setText(1, _translate("Form", "20"))
- self.treeWidget.topLevelItem(3).child(2).setText(0, _translate("Form", "爱好"))
- self.treeWidget.topLevelItem(3).child(2).setText(1, _translate("Form", "看书"))
- self.treeWidget.topLevelItem(4).setText(0, _translate("Form", "小智"))
- self.treeWidget.topLevelItem(4).child(0).setText(0, _translate("Form", "性别"))
- self.treeWidget.topLevelItem(4).child(0).setText(1, _translate("Form", "男"))
- self.treeWidget.topLevelItem(4).child(1).setText(0, _translate("Form", "年龄"))
- self.treeWidget.topLevelItem(4).child(1).setText(1, _translate("Form", "25"))
- self.treeWidget.topLevelItem(4).child(2).setText(0, _translate("Form", "爱好"))
- self.treeWidget.topLevelItem(4).child(2).setText(1, _translate("Form", "解说"))
- self.treeWidget.topLevelItem(5).setText(0, _translate("Form", "婷婷"))
- self.treeWidget.topLevelItem(5).child(0).setText(0, _translate("Form", "性别"))
- self.treeWidget.topLevelItem(5).child(0).setText(1, _translate("Form", "女"))
- self.treeWidget.topLevelItem(5).child(1).setText(0, _translate("Form", "年龄"))
- self.treeWidget.topLevelItem(5).child(1).setText(1, _translate("Form", "27"))
- self.treeWidget.topLevelItem(5).child(2).setText(0, _translate("Form", "爱好"))
- self.treeWidget.topLevelItem(5).child(2).setText(1, _translate("Form", "健身"))
- self.treeWidget.topLevelItem(6).setText(0, _translate("Form", "大熊"))
- self.treeWidget.topLevelItem(6).child(0).setText(0, _translate("Form", "性别"))
- self.treeWidget.topLevelItem(6).child(0).setText(1, _translate("Form", "男"))
- self.treeWidget.topLevelItem(6).child(1).setText(0, _translate("Form", "年龄"))
- self.treeWidget.topLevelItem(6).child(1).setText(1, _translate("Form", "14"))
- self.treeWidget.topLevelItem(6).child(2).setText(0, _translate("Form", "爱好"))
- self.treeWidget.topLevelItem(6).child(2).setText(1, _translate("Form", "睡觉"))
- self.treeWidget.setSortingEnabled(__sortingEnabled)
play_py
- #!/usr/bin/env python
- # _*_ coding: UTF-8 _*_
- """=================================================
- @Project -> File : FDS -> play2.py
- @IDE : PyCharm
- @Author : zihan
- @Date : 2020/5/13 10:41
- @Desc :
- ================================================="""
- import sys
- from PyQt5.QtWidgets import QApplication, QWidget, QMenu, QMessageBox
- from PyQt5.QtCore import Qt
- from ui_play2 import Ui_Form
- class QmyWidget(QWidget):
- def __init__(self, parent=None):
- super().__init__(parent) # 调用父类构造函数
- self.ui = Ui_Form() # 创建UI对象
- self.ui.setupUi(self) # 构造UI
- self.ui.treeWidget.expandAll()
- self.ui.treeWidget.setColumnWidth(0, 200)
- self.ui.treeWidget.setStyleSheet("QHeaderView::section{background:rgb(85, 170, 127);}")
- self.ui.treeWidget.setContextMenuPolicy(Qt.CustomContextMenu)
- self.ui.treeWidget.customContextMenuRequested.connect(self.do_custom_context_menu_request)
- def do_custom_context_menu_request(self, pos):
- # row_num = -1 # 当前节点的行号
- parent_num = -1 # 存放当前行的父节点的行号
- for i in self.ui.treeWidget.selectionModel().selection().indexes():
- # row_num = i.row()
- parent_num = i.parent().row()
- # print(parent_num)
- # print(row_num)
- if parent_num == -1:
- pass
- else:
- menu = QMenu()
- item1 = menu.addAction(u"选项一")
- item2 = menu.addAction(u"选项二")
- item3 = menu.addAction(u"选项三")
- action = menu.exec_(self.ui.treeWidget.mapToGlobal(pos))
- if action == item1:
- QMessageBox.information(self, "消息框标题", "你选择了:选项一", QMessageBox.Yes | QMessageBox.No)
- print("you select 1")
- elif action == item2:
- QMessageBox.information(self, "消息框标题", "你选择了:选项二", QMessageBox.Yes | QMessageBox.No)
- print("you select 2")
- elif action == item3:
- QMessageBox.information(self, "消息框标题", "你选择了:选项三", QMessageBox.Yes | QMessageBox.No)
- print("you select 3")
- else:
- return
- if __name__ == '__main__':
- app = QApplication(sys.argv) # 创建app
- form = QmyWidget()
- form.show()
- sys.exit(app.exec_())
这就可以实现右击菜单了。关键是有两句话
- self.ui.treeWidget.setContextMenuPolicy(Qt.CustomContextMenu) # 允许右击菜单
- self.ui.treeWidget.customContextMenuRequested.connect(self.do_custom_context_menu_request) # 右击时触发函数
这是关键。
第二十五篇 -- QTreeWidget右击菜单的实现的更多相关文章
- 第二十五篇:在SOUI中做事件分发处理
不同的SOUI控件可以产生不同的事件.SOUI系统中提供了两种事件处理方式:事件订阅 + 事件处理映射表(参见第八篇:SOUI中控件事件的响应) 事件订阅由于直接将事件及事件处理函数连接,不存在事件分 ...
- Python之路(第二十五篇) 面向对象初级:反射、内置方法
[TOC] 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它 ...
- flask第二十五篇——控制语句
有兴趣的请加船长公众号:自动化测试实战 先和大家强调一个发邮件的问题 # coding: utf-8 import smtplib from email.mime.text import MIMETe ...
- 第二十五篇:使用 sigaction 函数实现可靠信号
前言 在前文中,讲述了一个可靠信号的示例.它分成几个步骤组成( 请参考前文 ).在 Linux 系统编程中,有个方法可以将这些步骤给集成起来,让我们使用起来更加的方便. 那就是调用 sigaction ...
- SpringBoot非官方教程 | 第二十五篇:2小时学会springboot
转载请标明出处: http://blog.csdn.net/forezp/article/details/61472783 本文出自方志朋的博客 一.什么是spring boot Takes an o ...
- 第二十五篇 jQuery 学习7 获取并设置 CSS 类
jQuery 学习7 获取并设置 CSS 类 jQuery动态控制页面,那么什么是动态呢?我们就说一下静态,静态几乎又纯html+css完成,就是刷新页面之后,不会再出现什么变动,一个实打实的静态 ...
- 第二十五篇 -- C++宝典中的图书管理系统
此篇文章是基于C++宝典写的图书管理系统,本人对其中的部分做了相应修改,并且以现有格式替代原有格式,使程序更加清晰明了.此程序运行在VS2017上. 系统设计 图书管理系统分为四个模块:图书管理模块. ...
- 第二十五篇-Android 应用资源
这里介绍android的一些资源文件. 以一个登录界面为例. layout.xml <?xml version="1.0" encoding="utf-8" ...
- 第二十五篇 hashlib模块(* *)
用于加密相关的操作,Python 3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. 加密复杂程度: SHA1 ...
随机推荐
- 性能工具之Jmeter小白入门系列之一
一.简单了解 Apache JMeter The Apache JMeter application is open source software, a 100% pure Java applica ...
- 【NX二次开发】Block UI 半径尺寸(沿曲线的位置)
属性说明 常规 类型 描述 BlockID String 控件ID Enable Logical 是否可操作 Group Logical ...
- 04-拉格朗日对偶问题和KKT条件
04-拉格朗日对偶问题和KKT条件 目录 一.拉格朗日对偶函数 二.拉格朗日对偶问题 三.强弱对偶的几何解释 四.鞍点解释 4.1 鞍点的基础定义 4.2 极大极小不等式和鞍点性质 五.最优性条件与 ...
- 不懂就问」CPU 到底是怎么识别代码的?
近读到这样一篇文章,从底层硬件角度出发剖析了一下CPU对代码的识别和读取,内容之精彩,读完感觉学到的很多东西瞬间联系起来了,分享给猿们. 首先要开始这个话题要先说一下半导体.啥叫半导体? 半导体其实就 ...
- 将Winform和wpf的界面转换为CPF代码用来实现跨平台
CPF的设计器里带界面代码转换功能,将运行中的Winform或者wpf的程序界面转换为cpf代码,主要转换控件类型和布局,默认支持的是常用的原生控件.不支持Netcore,只支持.Netframewo ...
- Golang学习(用代码来学习) - 第一篇
package main import ( "fmt" "time" "unsafe" ) //示例代码 var isActive bool ...
- 快来为你的 .NET 应用加个监控吧!
导读 CZGL.ProcessMetrics 是一个 Metrics 库,能够将程序的 GC.CPU.内存.机器网络.磁盘空间等信息记录下来,使用 Prometheus 采集信息,然后使用 Grafa ...
- 如果给IIS添加防火墙入站配置,支持外部或者局域网访问
背景简介 也许你试着在本机IIS运行了一些网站,但是奇怪的是,同网络的终端却无法访问你,这时候极有可能被防火墙拦截了,所以我们要找到正确的姿势来开启魔法了. 找到入站规则设置 不管你是Win7还是Wi ...
- 22、部署drdb
22.1.heartbeat部署规划: 本文的实验环境是虚拟机设备: 名称 接口 ip 用途 master-db(主) eth0 10.0.0.16/24 用于服务器之间的数据同步(直连) eth1 ...
- QL Server 创建用户时报错:15023 用户,组或角色'XXX'在当前数据库中已存在?
在使用SQL Server 2000时,我们经常会遇到一个情况:需要把一台服务器上的数据库转移到另外一台服务器上.而转移完成后,需要给一个"登录"关联一个"用户" ...