Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySide QPushButton右键单击上下文菜单不为每个按钮分配_Python_Qt_Pyqt_Pyside_Maya - Fatal编程技术网

Python PySide QPushButton右键单击上下文菜单不为每个按钮分配

Python PySide QPushButton右键单击上下文菜单不为每个按钮分配,python,qt,pyqt,pyside,maya,Python,Qt,Pyqt,Pyside,Maya,我有一个循环,通过上下文菜单生成QPushButtons,并根据目录中图像中的文本(最后一部分不重要)使用不同的值填充子菜单 如您所见,如果在文件名中找到某个字符串,则应该向菜单中添加一个操作—确实如此 但是,这并不是按按钮保存,而是根据下一个图像文件名替换QAction(因此实际显示的最终QActions只是循环中最后一个图像的QAction) 使用setMenu()可以正确地分配所有内容,但我希望它位于上下文菜单中 我知道我可能错过了一些简单的东西,但我很困惑,任何指导都将不胜感激。谢谢。用

我有一个循环,通过上下文菜单生成QPushButtons,并根据目录中图像中的文本(最后一部分不重要)使用不同的值填充子菜单

如您所见,如果在文件名中找到某个字符串,则应该向菜单中添加一个操作—确实如此

但是,这并不是按按钮保存,而是根据下一个图像文件名替换QAction(因此实际显示的最终QActions只是循环中最后一个图像的QAction)

使用setMenu()可以正确地分配所有内容,但我希望它位于上下文菜单中


我知道我可能错过了一些简单的东西,但我很困惑,任何指导都将不胜感激。谢谢。

用另一个功能中的按钮构建菜单:

import PyQt4.QtCore as QtCore
import PyQt4.QtGui as QtGui

class test(QtGui.QDialog):

    def __init__(self):

        super(test, self).__init__()
        self.setObjectName("test")
        self.resize(574, 203)
        self.setWindowTitle("Clone UI")

        self.a_layout = QtGui.QHBoxLayout()

        previewFiles = ['blood-lips-lipstick-makeup-red-lips-Favim.com-75480.jpg', 'mins.jpg']

        # ABOVE CODE WAS PLACEHOLDER

        for preview in previewFiles:

            self.image = '/x/path' + preview
            self.btn = QtGui.QPushButton()
            self.btn._name = preview.split('.')[0] # use for my if/else condition menu


            # create the ocntext
            self.btn.installEventFilter(self)
            self.btn.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
            self.btn.customContextMenuRequested.connect(self.btnClicked)

            self.btn.setMinimumSize(360, 360)
            self.btn.setMaximumSize(360, 360)
            self.btn.setStyleSheet("background-image: url(" + self.image + ");border:1px solid #333;text-align: bottom center;font: bold 12px;")

            #popup menu
            self.popMenu = QtGui.QMenu(self)

            #self.btn.setMenu(self.popMenu)
            self.setLayout(self.a_layout)
            self.a_layout.addWidget(self.btn) # add rows to main layout

    def btnClicked(self, QPos):

        # the function that create the popup menu

        # get the button clicked
        btn = self.sender()

        # define where the menu appear on click
        parentPosition = btn.mapToGlobal(QtCore.QPoint(0, 0))
        menuPosition = parentPosition + QPos

        #clear the menu at each click to customize
        self.popMenu.clear()

        #populate
        self.populateBtnContext(btn._name)

        #show
        self.popMenu.move(menuPosition)
        self.popMenu.show()

    def populateBtnContext(self, name):

        # Do some if here :
        if name == "mins":
            self.popMenu.addAction(QtGui.QAction('256', self, checkable=True))
            self.popMenu.addAction(QtGui.QAction('512', self, checkable=True))
            self.popMenu.addAction(QtGui.QAction('1024', self, checkable=True))
        else:
            self.popMenu.addAction(QtGui.QAction('2048', self, checkable=True))
            self.popMenu.addAction(QtGui.QAction('4096', self, checkable=True))
            self.popMenu.addAction(QtGui.QAction('8192', self, checkable=True))  

        self.popMenu.addSeparator().setText("Alternate Shaders")
        self.popMenu.addAction(QtGui.QAction('Blinn', self))
        self.popMenu.addAction(QtGui.QAction('Phong', self))
        self.popMenu.addSeparator()
        self.popMenu.addAction(QtGui.QAction('Open file(s) location', self))

win = test()
win.show()

在另一个功能中按按钮构建菜单:

import PyQt4.QtCore as QtCore
import PyQt4.QtGui as QtGui

class test(QtGui.QDialog):

    def __init__(self):

        super(test, self).__init__()
        self.setObjectName("test")
        self.resize(574, 203)
        self.setWindowTitle("Clone UI")

        self.a_layout = QtGui.QHBoxLayout()

        previewFiles = ['blood-lips-lipstick-makeup-red-lips-Favim.com-75480.jpg', 'mins.jpg']

        # ABOVE CODE WAS PLACEHOLDER

        for preview in previewFiles:

            self.image = '/x/path' + preview
            self.btn = QtGui.QPushButton()
            self.btn._name = preview.split('.')[0] # use for my if/else condition menu


            # create the ocntext
            self.btn.installEventFilter(self)
            self.btn.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
            self.btn.customContextMenuRequested.connect(self.btnClicked)

            self.btn.setMinimumSize(360, 360)
            self.btn.setMaximumSize(360, 360)
            self.btn.setStyleSheet("background-image: url(" + self.image + ");border:1px solid #333;text-align: bottom center;font: bold 12px;")

            #popup menu
            self.popMenu = QtGui.QMenu(self)

            #self.btn.setMenu(self.popMenu)
            self.setLayout(self.a_layout)
            self.a_layout.addWidget(self.btn) # add rows to main layout

    def btnClicked(self, QPos):

        # the function that create the popup menu

        # get the button clicked
        btn = self.sender()

        # define where the menu appear on click
        parentPosition = btn.mapToGlobal(QtCore.QPoint(0, 0))
        menuPosition = parentPosition + QPos

        #clear the menu at each click to customize
        self.popMenu.clear()

        #populate
        self.populateBtnContext(btn._name)

        #show
        self.popMenu.move(menuPosition)
        self.popMenu.show()

    def populateBtnContext(self, name):

        # Do some if here :
        if name == "mins":
            self.popMenu.addAction(QtGui.QAction('256', self, checkable=True))
            self.popMenu.addAction(QtGui.QAction('512', self, checkable=True))
            self.popMenu.addAction(QtGui.QAction('1024', self, checkable=True))
        else:
            self.popMenu.addAction(QtGui.QAction('2048', self, checkable=True))
            self.popMenu.addAction(QtGui.QAction('4096', self, checkable=True))
            self.popMenu.addAction(QtGui.QAction('8192', self, checkable=True))  

        self.popMenu.addSeparator().setText("Alternate Shaders")
        self.popMenu.addAction(QtGui.QAction('Blinn', self))
        self.popMenu.addAction(QtGui.QAction('Phong', self))
        self.popMenu.addSeparator()
        self.popMenu.addAction(QtGui.QAction('Open file(s) location', self))

win = test()
win.show()