我制作了一个自定义的QMenu派生类,以便可以在菜单关闭之前选择多个条目。
通过QToolButton触发。
问题是,如果菜单足够大,它将与按钮重叠。单击QToolButton时,将立即选择当前光标位置的项目。
如何防止这种情况?
我的菜单代码,我试图用Bool标志忽略第一个事件,但是它不起作用。
class StayOpenMenu(QMenu):
"""
a class that overrides the QMenu mouseReleaseEvent to let the menu stay open when an element is selected
"""
def __init__(self, parent=None):
self.isfirstEvent = True
super().__init__("Stay open Menu", parent=parent)
def mouseReleaseEvent(self, a0: QMouseEvent):
if self.isfirstEvent:
a0.ignore()
self.isfirstEvent = False
return
try:
action = self.actionAt(a0.pos())
action.trigger()
except:
pass
def aboutToShow(self):
self.isfirstEvent = True
return super().aboutToShow()
def aboutToHide(self):
self.isfirstEvent = True
return super().aboutToShow()
图像:单击按钮之前
图像:单击QToolButton后
aboutToShow()
和aboutToShow()
是signals,不是方法,因此不能被“重写”。
创建用于将变量设置为True的插槽,并将其仅连接到aboutToHide()
信号。还要注意,您还必须注意mousePressEvent:如果未通过鼠标单击激活菜单(很可能是通过键盘按下工具按钮),它将阻止菜单接收合法的释放事件。
aboutToHide()