2016-04-14 30 views
1
için Menu 'ye sağ tıklayın

QComboClass'ı bir sağ tıklama menüsü ile genişletmeye çalışıyorum ve mevcut indeksi -1'e (seçimin temizlenmesi) ayarlama seçeneği sunarım. İçerik menüsünü veya hatta sağ tıklama olayını çağırmakta sorun yaşıyorum.PyQt QComboBox

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) 

Birisi bana yanlış yaptığımı söyleyebilir mi? Bunu deneyebilirsiniz

+0

Kod örneği benim için mükemmel çalışıyor deneyebilirsiniz. Tam olarak sorun nedir? Belki de, sınıfı nasıl kullandığınızı gösteren daha eksiksiz bir örnek vermelisiniz. – ekhumoro

+0

Sınıfı nasıl kullandığımı berbat ettim, uygulanmayanla aynı adı taşıyan onaylanmamış bir modülden başka bir sınıfım vardı. Bu yüzden kod çalışmadı. Bunu gerçekleştirmek için bir süre aldı! : \ – Vinay87

+1

Bu iş parçacığının yaklaşık bir yıllık olduğunu biliyorum, ancak gerçekten kullandığınız ya da sinyal işlemenin ikisi arasında farklı şekilde ele alındığından, kullandığınız 'pyqt5' VEYA pyqt4' seçmelisiniz. –

cevap

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

Bu

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

Bu kod soruyu cevaplayabilirken, neden ve/veya sorunun nasıl yanıtlandığıyla ilgili ek bağlam sağlayarak uzun vadeli değerini önemli ölçüde artıracaktır. Lütfen bazı açıklama eklemek için cevabınızı [düzenleyin]. – CodeMouse92