繁体   English   中英

PyQt5右键单击treeWidget项目

[英]PyQt5 Right Click treeWidget Item

嗨,我正在Python 3.5和Pyqt5中的项目上工作,我想在treeWidget Item上单击鼠标右键,以便创建带有操作的上下文菜单,但我在PyQt5中找不到。

实际已解决的问题,因此这是在QtreeWidget区域中添加右键单击上下文菜单的方法

 def menuContextuelAlbum(self, event):
    self.menu_contextuelAlb = QtWidgets.QMenu(self.treeWidget)
    ajoutFileAtt = self.menu_contextuelAlb.addAction("Ajouter l'album à la file d'attente")
    action2 = self.menu_contextuelAlb.exec_(self.treeWidget.mapToGlobal(event))
    if action2 is not None:
        if action2 == ajoutFileAtt:
            self.addAlbumlistAtt()

并使用以下命令启动它:

    self.treeWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)  
    self.treeWidget.customContextMenuRequested.connect(self.menuContextuelAlbum)  
    self.actionOuvrir.triggered.connect(self.menu)  

您需要使用自己的mousePressEvent创建自己的QTreeWidget mousePressEvent检查事件类型是否为右键单击,如果是,请执行任何操作。 然后,在树中添加小部件时,请确保将是添加的类而不是QTreeWidget

所以像这样:

from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import QTreeWidgetItem
import sys

class MyTreeWidget(QtGui.QTreeWidget):
    def __init__(self, parent = None):
        QtGui.QTreeWidget.__init__(self, parent)
    def mousePressEvent (self, event):
        print("child clicked ! ")
        if event.button() == QtCore.Qt.RightButton:
            print("right click !")
        QtGui.QTreeWidget.mousePressEvent(self, event)

def main():
    app = QtGui.QApplication(sys.argv)
    QtGui.qApp = app
    pointListBox = MyTreeWidget()
    root = QTreeWidgetItem(pointListBox, ["root"])
    A = QTreeWidgetItem(root, ["A"])
    barA = QTreeWidgetItem(A, ["bar", "i", "ii"])
    bazA = QTreeWidgetItem(A, ["baz", "a", "b"])

    pointListBox.show()

    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

发布更新的答案。 这对我有用:

class MainWindow_W():
    def __init__(self):
        self.app = QtWidgets.QApplication(sys.argv)
        self.MainWindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.MainWindow)



        # Connect the contextmenu
        self.ui.treeWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.ui.treeWidget.customContextMenuRequested.connect(self.menuContextTree)


    def menuContextTree(self, point):
        # Infos about the node selected.
        index = self.ui.treeWidget.indexAt(point)

        if not index.isValid():
            return

        item = self.ui.treeWidget.itemAt(point)
        name = item.text(0)  # The text of the node.

        # We build the menu.
        menu = QtWidgets.QMenu()
        action = menu.addAction("Souris au-dessus de")
        action = menu.addAction(name)
        menu.addSeparator()
        action_1 = menu.addAction("Choix 1")
        action_2 = menu.addAction("Choix 2")
        action_3 = menu.addAction("Choix 3")


        menu.exec_(self.ui.treeWidget.mapToGlobal(point))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM