首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在QPushButton上设置PyQt5中的悬停事件处理程序

如何在QPushButton上设置PyQt5中的悬停事件处理程序
EN

Stack Overflow用户
提问于 2022-10-01 12:14:45
回答 1查看 72关注 0票数 0

我试图在按钮上设置一个悬停事件,以打开作为QDialog实现的“选项”菜单。到目前为止,除了悬停之外,一切都能正常工作:当按下按钮时,菜单就会打开,如果选择了任何选项,或者鼠标被从对话框中移开,菜单就会消失。

现在,我想打开窗口,而不是点击按钮,而是悬停在它上面。我见过PyQt5 mouse hover functionsHow to detect mouse hover event in PySide6 widget,但我无法做到这一点。

我的代码如下所示:

代码语言:javascript
运行
复制
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_()

使用自定义对话框:

代码语言:javascript
运行
复制
class selfClosingDialog(QDialog):
    def __init__(self, closeFunc, parent=None):
        super().__init__(parent)
        self.closeFunc = closeFunc

    def leaveEvent(self, event):
        self.closeFunc()

最好的解决方案是用某种onHover替换单击事件。

EN

回答 1

Stack Overflow用户

发布于 2022-10-01 12:40:15

我找到了答案。

它不是一个信号,而是一个事件enterEvent,需要由QWidget的子类重新实现。

代码语言:javascript
运行
复制
class HoverOpenBtn(QPushButton):
    def __init__(self, text, openOtionsFunc, parent=None):
        super().__init__(text, parent)
        self.openFunc = openOtionsFunc

    def enterEvent(self, event):
        self.openFunc()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73918216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档