欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pyqt5 中的qlistwidget item 右键菜单

程序员文章站 2022-06-08 23:49:19
...

想法

我的想法就是在qlistwidget中右键显示一个菜单,然后可以用户添加,删除,重命名item.因为pyqt的非常的少,所以记录下来.

整体代码

        
        self.leftWidget =QListWidget()
        #禁止双击可编辑	
        self.leftWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
        #右键菜单
        self.leftWidget.setContextMenuPolicy(Qt.CustomContextMenu)
        self.leftWidget.customContextMenuRequested.connect(self.myListWidgetContext)

    def myListWidgetContext(self,position):
        #弹出菜单
        popMenu = QMenu()
        creAct =QAction("新建分组",self)
        delAct =QAction("删除分组",self)
        renameAct =QAction(u'重命名', self)
        #查看右键时是否在item上面,如果不在.就不显示删除和修改.
        popMenu.addAction(creAct)
        if self.leftWidget.itemAt(position):
            popMenu.addAction(delAct)
            popMenu.addAction(renameAct)

        creAct.triggered.connect(self.CreateNewItem)
        renameAct.triggered.connect(self.RenameItem)
        delAct.triggered.connect(self.DeleteItem)
        popMenu.exec_(self.leftWidget.mapToGlobal(position))

    #创建新的分组
    def CreateNewItem(self):
    	#创建一个没有名字的item
        item =QListWidgetItem("")
        item.setTextAlignment(Qt.AlignCenter)
        #使得item是可以编辑的.
        item.setFlags(item.flags() | Qt.ItemIsEditable)
        self.leftWidget.addItem(item)
        #创建后就可以编辑item,用户自己起名字.
        self.leftWidget.editItem(item)



#删除分组
    def DeleteItem(self):
        self.leftWidget.takeItem(self.leftWidget.currentRow())

    #重命名分组
    def RenameItem(self):
        curRow =self.leftWidget.currentRow()
        item=self.leftWidget.item(curRow)
        item.setFlags(item.flags() | Qt.ItemIsEditable)
        self.leftWidget.editItem(item)
        self.leftWidget.itemChanged.connect(lambda :self.ChangeItem(item))


    def ChangeItem(self,item):
        print("test")

代码解释

  1. 首先呢创建一个listwidget,这个很简单.

self.leftWidget =QListWidget()

  1. 第二步,就是禁止双击可以编辑item,因为我想让只能通过右键菜单的重命名重新编辑item.所以需要禁止掉这个东西.

self.leftWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)

  1. 然后实现在listwidget内部邮件触发contextmune.

self.leftWidget.setContextMenuPolicy(Qt.CustomContextMenu) self.leftWidget.customContextMenuRequested.connect(self.myListWidgetContext)

  1. connect绑定了myListWidgetContext函数,所以就会调用这个函数实现创建一个菜单.
  2. myListWidgetContext就是创建了三个action,然后分别绑定了下面的三个函数.
  3. 下面两行代码就是先获取你重名的是哪一个item,通过第一行获取行,第二行获取你要重命名的item

curRow =self.leftWidget.currentRow()
item=self.leftWidget.item(curRow)

最后结果

pyqt5 中的qlistwidget item 右键菜单

相关标签: python pyqt