前言
在使用pyqt5 中treewidget控件的时候,想要右键弹出菜单清空控件中除了标题行的所有列,实现清空的效果,搜索了很多方法,最终自己实现一个
一、添加treewidget策略
self.treeWidget.setContextMenuPolicy(Qt.CustomContextMenu) # 打开右键菜单的策略
self.treeWidget.customContextMenuRequested.connect(self.treeWidgetItem_fun) # 绑定事件
1.解释说明
先设置setContextMenuPolicy为Qt.CustomContextMenu,这个意思是单击鼠标右键可以显示出上下文菜单,也就是打开右键菜单
customContextMenuRequested会给你提供的处理函数传递一个代表鼠标点击位置的QPoint对象
比如
def show_context_menu(self, pos):
menu = QMenu(self)
action = menu.addAction('add folder')
action.triggered.connect(...)
action = menu.addAction('rename')
action.triggered.connect(...)
action = menu.addAction('delete')
action.triggered.connect(...)
menu.exec_(QCursor.pos())
不执行menu.exec_菜单不会显示的
二、编写绑定事件的函数
#定义treewidget中item右键界面
def treeWidgetItem_fun(self,pos):
item=self.treeWidget.currentItem()
item1= self.treeWidget.itemAt(pos)
if item!=None and item1!=None: # 判断菜单是否为空
popMenu = QMenu()
popMenu.addAction(QAction(u'清空', self.treeWidget))
popMenu.addAction(QAction(u'复制', self.treeWidget))
popMenu.triggered[QAction].connect(self.processtrigger) # 右键点击清空之后执行的操作
popMenu.exec_(QCursor.pos()) # 执行之后菜单可以显示
# 右键点击清空之后执行的操作
def processtrigger(self, q):
#相应的处理
self.treeWidget.clear()
pass
1.根据不同命令触发不同事件
如果是有两个菜单选项,可以通过q.text()来获取不同的命令,然后判断之后进行不同操作
def processtrigger(self,q):
#判断是项目节点还是任务节点
command=q.text()
item=self.taskTreeWidget.currentItem()
if command=="清空":
print(item.text(2))
elif command=="复制":
QFileDialog.getOpenFileNames(self,"",item.text(3))
print(item.text(3))
三、效果展示
总结
这就是在pyqt5 treewidget上如何进行右键清空,可以根据自己的具体需要进行改变,基本上都能够实现目的