我试图在按钮上设置一个悬停事件,以打开作为QDialog实现的“选项”菜单。到目前为止,除了悬停之外,一切都能正常工作:当按下按钮时,菜单就会打开,如果选择了任何选项,或者鼠标被从对话框中移开,菜单就会消失。
现在,我想打开窗口,而不是点击按钮,而是悬停在它上面。我见过PyQt5 mouse hover functions和How to detect mouse hover event in PySide6 widget,但我无法做到这一点。
我的代码如下所示:
class ElementWidget(QWidget):
def __init__ (self, p, element):
super().__init__(p)
layout = QHBoxLayout()
label = QLabel(element)
label.setFixedSize(200,39)
self.btn = QPushButton("btn")
self.btn.clicked.connect(self._openOptionsMenu)
self.btn.setFixedSize(50,39)
layout.addWidget(label)
layout.addWidget(self.btn)
self.setLayout(layout)
self.setFixedSize(250,60)
def _openOptionsMenu(self):
self.dlg = selfClosingDialog(self.closeOptionsMenu, parent = self)
self.dlg.setLayout(ElementOptionsLayout(self.closeOptionsMenu))
self.dlg.setWindowFlag(Qt.FramelessWindowHint)
self.dlg.setGeometry(QCursor.pos().x(), QCursor.pos().y() ,100,100)
self.dlg.show()
def closeOptionsMenu(self):
self.dlg.close()
if __name__ == "__main__":
app = QApplication([])
window = QMainWindow()
window.resize(500,400)
wid = ElementWidget(window,"Parabola_0")
window.show()
app.exec_()
使用自定义对话框:
class selfClosingDialog(QDialog):
def __init__(self, closeFunc, parent=None):
super().__init__(parent)
self.closeFunc = closeFunc
def leaveEvent(self, event):
self.closeFunc()
最好的解决方案是用某种onHover替换单击事件。
发布于 2022-10-01 12:40:15
我找到了答案。
它不是一个信号,而是一个事件enterEvent
,需要由QWidget的子类重新实现。
class HoverOpenBtn(QPushButton):
def __init__(self, text, openOtionsFunc, parent=None):
super().__init__(text, parent)
self.openFunc = openOtionsFunc
def enterEvent(self, event):
self.openFunc()
https://stackoverflow.com/questions/73918216
复制相似问题