2010-07-01 80 views
2

我想在PyQt4中创建一个下拉列表,当选择一个元素时执行动作。此外,某些选项可能在某些时候不可用。他们仍然应该在名单中,但是很灰。带动作的PyQt4下拉列表

我尝试将菜单附加到QToolButton,但我甚至看不到菜单。 它是如何完成的?

谢谢! Nathan

+0

你真的只是想要在选择时执行一个动作的下拉菜单,还是你想要一个有菜单的按钮? – 2010-07-01 22:17:56

+0

我真的很想在选择时执行一个动作。 – Nathan 2010-07-03 16:26:52

回答

1

使用弹出窗口。您可以在任何地方使用QMenu.exec_方法触发弹出窗口,并传递要显示菜单的点。

我创建了一个记住它被点击的按钮,并将它连接到创建和显示弹出窗口的方法。

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有ToolButtonPopupMode枚举,它控制着它如何处理菜单和多个动作。当设置为QToolButton::MenuButtonPopup时,它将显示具有菜单选项的按钮的典型箭头。

要使用它设置适当的弹出模式,然后您可以使用setMenu将菜单添加到QToolButton,或者您可以使用addAction添加动作。然后,QToolButton应该按照预期的方式响应菜单,无论是生成的动作还是实际的QMenu。