【问题标题】:PyQt Right click Menu for QComboBoxQComboBox的PyQt右键菜单
【发布时间】:2016-04-14 05:39:00
【问题描述】:

我正在尝试使用右键菜单扩展 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)

谁能告诉我我做错了什么?

【问题讨论】:

  • 您的示例代码非常适合我。究竟是什么问题?也许你应该给出一个更完整的例子来说明你是如何使用这个类的。
  • 我搞砸了我如何使用这个类,我从一个已弃用的模块中获得了另一个同名的类,但没有实现这个。这就是代码不起作用的原因。花了一段时间才意识到这一点! :\
  • 我知道这个线程大约有一年的历史,但你真的应该选择pyqt5pyqt4,因为插槽和信号处理在两者之间是不同的。

标签: python pyqt pyqt4 pyqt5


【解决方案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()

【讨论】:

    【解决方案2】:

    你可以试试这个

    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()
    

    【讨论】:

    • 虽然此代码可以回答问题,但提供有关它为什么和/或如何回答问题的额外上下文将显着提高其长期价值。请edit你的答案添加一些解释。
    猜你喜欢
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多