2010-07-01 4 views
2

Je souhaite créer une liste déroulante dans PyQt4, qui exécute une action lorsqu'un élément est sélectionné. En outre, certaines options peuvent ne pas être disponibles à un moment donné. Ils devraient toujours être dans la liste, mais grisés.Liste déroulante PyQt4 avec actions

J'ai essayé d'attacher un menu à un QToolButton, mais je ne peux même pas voir le menu. Comment cela se passe-t-il?

Merci! Nathan

+0

Voulez-vous vraiment une liste déroulante avec une action effectuée sur la sélection, ou voulez-vous un bouton qui a un menu dessus? –

+0

Je veux vraiment qu'une action soit effectuée sur la sélection. – Nathan

Répondre

1

Utilisez un popup. Vous pouvez déclencher un popup n'importe où, en utilisant la méthode QMenu.exec_ et en passant le point auquel vous voulez que le menu apparaisse.

J'ai créé un bouton qui me rappelait où il avait été cliqué, et je l'ai connecté à la méthode pour créer et afficher la fenêtre contextuelle.

class MemoryButton(QPushButton): 
    def __init__(self, *args, **kw): 
     QPushButton.__init__(self, *args, **kw) 
     self.last_mouse_pos = None 

    def mousePressEvent(self, event): 
     self.last_mouse_pos = event.pos() 
     QPushButton.mousePressEvent(self, event) 

    def mouseReleaseEvent(self, event): 
     self.last_mouse_pos = event.pos() 
     QPushButton.mouseReleaseEvent(self, event) 

    def get_last_pos(self): 
     if self.last_mouse_pos: 
      return self.mapToGlobal(self.last_mouse_pos) 
     else: 
      return None 

button = MemoryButton("Click Me!") 

def popup_menu(): 
    popup = QMenu() 
    menu = popup.addMenu("Do Action") 

    def _action(check): 
     print "Action Clicked!" 

    menu.addAction("Action").triggered.connect(_action)                
    popup.exec_(button.get_last_pos()) 

button.clicked.connect(popup_menu) 
0

QToolButton a ToolButtonPopupMode ENUM qui contrôle la façon dont il gère les menus et les multiples actions. Lorsqu'il est réglé sur QToolButton::MenuButtonPopup, il affiche la flèche typique des boutons qui ont des options de menu. Pour l'utiliser, définissez le mode contextuel approprié et vous pouvez ajouter un menu à QToolButton en utilisant setMenu ou vous pouvez ajouter des actions en utilisant addAction. QToolButton devrait alors répondre comme prévu aux clics sur le menu, que l'Action soit générée ou un QMenu réel.