moveMouseEvent 在不同小部件上的不同行为

Posted

技术标签:

【中文标题】moveMouseEvent 在不同小部件上的不同行为【英文标题】:Different Behavior of moveMouseEvent on different Widgets 【发布时间】:2018-01-07 12:22:16 【问题描述】:

在学习事件处理时,我注意到 mouseMoveEvent 并在 QTextBrowser 和 QPushButton 上实现了它,结果在某种程度上是不同的。当我将鼠标悬停在 QTextBrowser 上时,mouseMoveEvent 被激活。但是在 QPushButton 的情况下,当鼠标保持单击时会发生 mouseMove 事件,然后光标悬停在周围。一旦单击被释放,悬停在 Button 上就没有效果。 为什么会有这样的差异?我应该怎么做才能在 QPushButton 上实现相同的功能,即在没有 mouseKeypressed 的情况下激活事件

class window35(QtWidgets.QMainWindow):
    def __init__(self):
        super(window35, self).__init__()
        myWidget=QtWidgets.QWidget()
        self.Hbox=QtWidgets.QHBoxLayout()
        self.btn=QtWidgets.QPushButton("HAA BHYI\nBUTTON")
        self.textBrowser=QtWidgets.QTextBrowser()
        self.Hbox.addWidget(self.btn)
        self.Hbox.addWidget(self.textBrowser)
        myWidget.setLayout(self.Hbox)
        self.setCentralWidget(myWidget)
        self.btn.mouseMoveEvent=self.mouse_move
        self.textBrowser.mouseMoveEvent=self.text_browser_move
#        print(type(self.btn.mouseMoveEvent))

        self.show()
    def mouse_move(self,event):
        print("hello btn")
        try:
            QtWidgets.QPushButton.mouseMoveEvent(self.btn,event)
        except Exception as E:
            print(E)

    def text_browser_move(self,event):
        print("hello list")
        try:
            QtWidgets.QTextBrowser.mouseMoveEvent(self.textBrowser,event)
        except Exception as E:
            print(E)




app=QtWidgets.QApplication([])
ex=window35()
sys.exit(app.exec_())

我注意到 listWidget 也像 QPushButton 一样工作 谢谢:)

【问题讨论】:

并非所有小部件类型默认都有mouse tracking enabled。 【参考方案1】:

感谢@G.M。 我刚刚添加了

self.btn.setMouseTracking(True)

达到想要的效果

【讨论】:

以上是关于moveMouseEvent 在不同小部件上的不同行为的主要内容,如果未能解决你的问题,请参考以下文章

如何在 FLTK 中对两个不同的小部件同时使用键盘箭头和鼠标单击?

使用布局管理器管理不同大小的不同小部件

当返回不同的小部件时,返回不同 StatefulWidgets 的方法不更新

添加不同颜色的 Gridster 小部件

在文本小部件中为不同的字母颤动不同的颜色

Android:配置小部件(不同小部件实例的相同 setOnClickPendingIntent 附加功能)