带操作的PyQt4下拉列表

2024-05-16 05:21:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在PyQt4中创建一个下拉列表,当一个元素被选中时执行一个操作。此外,有些选项可能在某个时间不可用。他们应该还在名单上,但已经变灰了。在

我尝试将菜单附加到QToolButton,但我甚至看不到菜单。 怎么做的?在

谢谢! 内森


Tags: 元素列表选项时间菜单pyqt4名单变灰
2条回答

QToolButton有ToolButtonPopupMode枚举,该枚举控制它如何处理菜单和多个操作。当设置为QToolButton::MenuButtonPopup时,它将显示具有菜单选项的按钮的典型箭头。在

要使用它,请设置适当的弹出模式,然后可以使用setMenu向QToolButton添加菜单,也可以使用addAction添加操作。然后QToolButton应该像预期的那样响应菜单上的单击,不管是操作生成的还是实际的QMenu。在

使用弹出窗口。您可以使用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)

相关问题 更多 >