我想在PyQt4中创建一个下拉列表,当选择一个元素时执行动作。此外,某些选项可能在某些时候不可用。他们仍然应该在名单中,但是很灰。带动作的PyQt4下拉列表
我尝试将菜单附加到QToolButton,但我甚至看不到菜单。 它是如何完成的?
谢谢! Nathan
我想在PyQt4中创建一个下拉列表,当选择一个元素时执行动作。此外,某些选项可能在某些时候不可用。他们仍然应该在名单中,但是很灰。带动作的PyQt4下拉列表
我尝试将菜单附加到QToolButton,但我甚至看不到菜单。 它是如何完成的?
谢谢! Nathan
使用弹出窗口。您可以在任何地方使用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)
QToolButton有ToolButtonPopupMode枚举,它控制着它如何处理菜单和多个动作。当设置为QToolButton::MenuButtonPopup
时,它将显示具有菜单选项的按钮的典型箭头。
要使用它设置适当的弹出模式,然后您可以使用setMenu将菜单添加到QToolButton,或者您可以使用addAction添加动作。然后,QToolButton应该按照预期的方式响应菜单,无论是生成的动作还是实际的QMenu。
你真的只是想要在选择时执行一个动作的下拉菜单,还是你想要一个有菜单的按钮? – 2010-07-01 22:17:56
我真的很想在选择时执行一个动作。 – Nathan 2010-07-03 16:26:52