带操作的PyQt4下拉列表
我想在PyQt4中创建一个下拉列表,当选择某个选项时可以执行一个动作。而且,有些选项在某些时候可能不可用。它们仍然应该出现在列表中,但要显示成灰色。
我试着把一个菜单附加到QToolButton上,但我甚至看不到这个菜单。请问该怎么做呢?
谢谢!
Nathan
2 个回答
0
QToolButton 有一个叫做 ToolButtonPopupMode 的选项,这个选项决定了它如何处理菜单和多个操作。当设置为 QToolButton::MenuButtonPopup
时,它会显示一个箭头,这个箭头通常出现在有菜单选项的按钮上。
要使用这个功能,你需要先设置合适的弹出模式,然后可以通过 setMenu 方法为 QToolButton 添加一个菜单,或者通过 addAction 方法添加一些操作。这样,QToolButton 就会在点击菜单时,按照预期的方式做出反应,无论是生成的操作还是实际的 QMenu。
2
使用弹出菜单。你可以在任何地方触发一个弹出菜单,方法是使用 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)