首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QPushButton FocusIn产生哪个信号?

QPushButton FocusIn产生哪个信号?
EN

Stack Overflow用户
提问于 2010-02-03 17:58:01
回答 2查看 2K关注 0票数 4

我正在创建一个小型PyQt应用程序,并且陷入了MouseOver效应。

我有一个QMainWindow,它有三个按钮,名为createProfileButtondownloadPackagesButtoninstallPackagesButton。这些都是QPushButton型的

现在我已经创建了一个标签,当有人将鼠标悬停在这些按钮上时,它将保存文本。我查了一下文件,知道它可以用过载的方式来处理。

世界银行(

  • focusInEvent(self,QFocusEvent) (
  • focusOutEvent(self,QFocusEvent)

按钮的方法。这意味着我必须为这三个按钮中的每一个扩展QPushButton,而每个按钮都必须扩展为一个类的对象。我试着寻找鼠标悬停或从按钮上移开时发出的信号,但没有结果。我在网上得到的帮助就是实现了这两种方法。

扩展一个类并创建一个类不是过火了吗?信号会很好,不幸的是,我找不到任何信号。

  • http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qpushbutton.html -没有signals
  • http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qabstractbutton.html -已经点击、释放、按下和切换了signals
  • http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qwidget.html -只有一个方法

因此,我检查了整个继承层次结构,没有发现FocusInFocusOut的信号。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-03 18:42:28

正如您所述,此功能不存在信号。你有两个基本的选择。

选项1 -子类:

代码语言:javascript
复制
class FocusEmittingButton(QPushButton):
    #...
    def focusInEvent(self, event):
        # emit your signal

然后,可以在客户端代码中连接到该信号。此外,如果有必要,可以使用designer的Promote To特性将每个按钮提升到FocusEmittingButton类型。您只需要子类一次,然后确保不同的按钮都是相同的类型。

选项2 -使用QApplication.focusChanged

您还可以利用QApplication.focusChanged(oldQWidget, newQWidget)。这样做,您就不需要子类和覆盖焦点事件。相反,您可以连接到QApplication.focusChanged信号,然后在处理程序中进行响应。

票数 4
EN

Stack Overflow用户

发布于 2010-07-17 22:25:29

在父部件中还有另一种接收焦点信号的方法。可以添加事件筛选器:

代码语言:javascript
复制
class MyParent(QWidget):
    def __init__(self):
        #...
        self.mybutton.installEventFilter()

    def eventFilter(self, obj, event):
        if obj is self.mybutton and event.type() == QEvent.FocusOut:
           #...
        return QWidget.eventFilter(self, obj, event)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2194158

复制
相关文章

相似问题

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