pyqt5 treewidget实现控件中右键出现菜单


前言

在使用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上如何进行右键清空,可以根据自己的具体需要进行改变,基本上都能够实现目的

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在QTableWidget实现右键菜单功能,可以使用QMenu和contextMenuEvent()事件。具体实现步骤如下: 1.创建QMenu对象并添加菜单项。 ```python menu = QMenu(self) menu.addAction("Copy") menu.addAction("Paste") ``` 2.在QTableWidget的contextMenuEvent()事件,设置菜单的位置,并显示菜单。 ```python def contextMenuEvent(self, event): menu = QMenu(self) menu.addAction("Copy") menu.addAction("Paste") if self.itemAt(event.pos()): menu.exec_(event.globalPos()) ``` 完整代码如下: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QMenu from PyQt5.QtCore import Qt class MainWindow(QMainWindow): def __init__(self): super().__init__() self.table = QTableWidget(self) self.table.setRowCount(4) self.table.setColumnCount(2) self.table.setHorizontalHeaderLabels(["Name", "Age"]) self.table.setItem(0, 0, QTableWidgetItem("Tom")) self.table.setItem(0, 1, QTableWidgetItem("20")) self.table.setItem(1, 0, QTableWidgetItem("Jerry")) self.table.setItem(1, 1, QTableWidgetItem("18")) self.table.setItem(2, 0, QTableWidgetItem("Lucy")) self.table.setItem(2, 1, QTableWidgetItem("22")) self.table.setItem(3, 0, QTableWidgetItem("John")) self.table.setItem(3, 1, QTableWidgetItem("25")) self.setCentralWidget(self.table) def contextMenuEvent(self, event): menu = QMenu(self) menu.addAction("Copy") menu.addAction("Paste") if self.table.itemAt(event.pos()): menu.exec_(event.globalPos()) if __name__ == "__main__": app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 这样就可以在QTableWidget实现右键菜单功能了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值