Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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 PyQt右键单击QComboBox的菜单_Python_Pyqt_Pyqt4_Pyqt5 - Fatal编程技术网

Python PyQt右键单击QComboBox的菜单

Python PyQt右键单击QComboBox的菜单,python,pyqt,pyqt4,pyqt5,Python,Pyqt,Pyqt4,Pyqt5,我试图通过右键单击菜单扩展QComboClass,并为它提供一个选项,将当前索引设置为-1(清除选择)。我在调用上下文菜单甚至右键单击事件时遇到问题 class ComboBox(QComboBox): def __init__(self, *args, **kwargs): super(ComboBox, self).__init__() self.setContextMenuPolicy(Qt.CustomContextMenu) se

我试图通过右键单击菜单扩展QComboClass,并为它提供一个选项,将当前索引设置为-1(清除选择)。我在调用上下文菜单甚至右键单击事件时遇到问题

class ComboBox(QComboBox):
    def __init__(self, *args, **kwargs):
        super(ComboBox, self).__init__()
        self.setContextMenuPolicy(Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(self.showMenu)

    def showMenu(self, pos):
        menu = QMenu()
        clear_action = menu.addAction("Clear Selection", self.clearSelection)
        action = menu.exec_(self.mapToGlobal(pos))

    def clearSelection(self):
        self.setCurrentIndex(-1)
有人能告诉我我做错了什么吗?

你能试试这个吗

def showMenu(self,event):
    menu = QMenu()
    clear_action = menu.addAction("Clear Selection", self)
    action = menu.exec_(self.mapToGlobal(event.pos()))
    if action == clear_action:
        self.clearSelection()
你可以试试这个

import sys
from PyQt4 import QtGui
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QMenu



class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        self.lbl = QtGui.QLabel("Ubuntu", self)

        self.combo = QtGui.QComboBox(self)
        self.combo.setContextMenuPolicy(Qt.CustomContextMenu)
        self.combo.customContextMenuRequested.connect(self.showMenu)
        self.combo.addItem("Ubuntu")
        self.combo.addItem("Mandriva")
        self.combo.addItem("Fedora")
        self.combo.addItem("Red Hat")
        self.combo.addItem("Gentoo")

        self.combo.move(50, 50)
        self.lbl.move(50, 150)

        self.combo.activated[str].connect(self.onActivated)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QtGui.QComboBox')
        self.show()

    def showMenu(self,pos):
        menu = QMenu()
        clear_action = menu.addAction("Clear Selection")
        action = menu.exec_(self.mapToGlobal(pos))
        if action == clear_action:
            self.combo.setCurrentIndex(0)

    def onActivated(self, text):

        self.lbl.setText(text)
        self.lbl.adjustSize()

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

您的示例代码对我来说非常好。到底是什么问题?也许你应该给出一个更完整的例子来说明你是如何使用这个类的。我把我如何使用这个类搞砸了,我从一个不推荐使用的模块中得到了另一个同名的类,但没有实现这个类。这就是代码不起作用的原因。花了一段时间才意识到这一点!:\我知道这个线程已经有一年的历史了,但是你真的应该选择你使用的
pyqt5
或者
pyqt4
,因为插槽和信号处理在这两者之间是不同的。虽然这段代码可以回答这个问题,提供关于为什么和/或如何回答该问题的额外背景将显著提高其长期价值。请在您的回答中添加一些解释。