第二十五篇 -- 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 ...
随机推荐
- 实验4、Flask基于Blueprint & Bootstrap布局的应用服务
1. 实验内容 模块化工程内容能够更好的与项目组内成员合作,Flask Blueprint提供了重要的模块化功能,使得开发过程更加清晰便利.此外,Flask也支持Bootstrap的使用. 2. 实验 ...
- 使用 Hexo 搭建静态博客
目录 Hexo 简介 什么是 Hexo? Hexo 安装 Hexo 建站 Hexo 配置 Hexo 自定义主题 Hexo 写作 Hexo 服务器 Hexo 生成与发布 一键部署 Hexo 站点到 gi ...
- 【Java】equals 和 == 的区别
之前有在 Java字符串比较(3种方法)以及对比 C++ 时的注意项 中写过一点关于 equals()与==的比较,但最近的Java考试复习过程中发现有部分情况没涉及到,故重新学习一下 在编写代码的时 ...
- mysql的优化_第十一篇(查询计划篇)
Mysql优化(出自官方文档) - 第十一篇(查询计划篇) 目录 Mysql优化(出自官方文档) - 第十一篇(查询计划篇) 1 EXPLAIN Output Format EXPLAIN Join ...
- gomod使用小结
gomod使用小结 使用方法 把工程拷贝到$GOPATH/src之外 在工程目录下执行:go mod init {module name}该命令会创建一个go.mod文件 然后在该目录下执行 go b ...
- 不藏了,这些Java反射用法总结都告诉你们
摘要:Java反射是一种非常强大的机制,它可以在同一个系统中去检测内部的类的字段.方法和构造函数.它非常多的Java框架中,都大量应用了反射技术,如Hibernate和Spring.可以说,反射机制的 ...
- MongoDB数据库 5分钟快速上手
安装 本次安装使用docker镜像,安装无障碍,一行命令即可解决 # 安装镜像并启动 可以自行修改命令中的参数 ## 账户 tanoak 密码 123123 ## -p 27018:27017 映射端 ...
- 在spring boot使用总结(九) 使用yaml语言来写配置文件
yaml是专门用来写配置文件的语言.使用yaml来写配置文件扩展性比较强而且十分方便.spring boot支持使用yaml语言来写配置文件,使用snakeyaml库来读取配置文件.spring bo ...
- Nacos配置中心功能
目录 Nacos的配置管理模型 命名空间(Namespace) 配置分组(Group) 配置集(Data ID) 配置项 一个最佳实践 命名空间管理 配置管理 参考 Nacos的配置管理模型 对于Na ...
- Linux | 通配符 & 转义符
通配符 我们在查看文件的时候,可能会出现只记得开头几个字母的情况,并且相似名称的文件还非常多的情况.还有小编想要删除一些开头一样的文件,这种情况下都可以使用通配符号: # 查找vcs文件 ls /de ...