QPushButton选项卡突出显示信号

时间:2014-12-12 12:36:33

标签: python pyqt4 qt-signals

我使用PyQt设计应用程序。出于可访问性原因,我想在突出显示按钮时说出按钮的名称(使用按Tab键导航。)

使用Windows Speech API,我的演讲顺利。现在我想使用信号和插槽,但QPushButton似乎没有突出显示的信号。我发现的那些被点击,摧毁,按下,释放,切换。他们都没有工作。

有没有办法设置当按钮突出显示按钮时会发出的自定义信号?

2 个答案:

答案 0 :(得分:1)

QApplication负责管理窗口小部件焦点,因此您可以连接到focusChanged信号:

    QtGui.qApp.focusChanged.connect(self.handleFocusChanged)

信号发送对丢失/接收焦点的前一个/当前窗口小部件的引用(通过任何方式),因此处理程序可能如下所示:

    def handleFocusChanged(self, old, new):
        if old is not None and new is not None:
            if isinstance(new, QtGui.QPushButton):
                print('Button:', new.text())
            elif isinstance(new, QtGui.QLineEdit):
                print('Line Edit:', new.objectName())
            # and so forth...

您还可以使用以下方式获取当前具有焦点的窗口小部件:

    widget = QtGui.qApp.focusWidget()

答案 1 :(得分:0)

虽然@ekhumoro接受的答案有效,并且是更好的方式(在我看来),也可以通过继承QPushButton来实现这一点。像这样:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class FocusButton(QPushButton):
    def __init__(self, parent=None):
        super(FocusButton, self).__init__(parent)

    tabSignal = pyqtSignal()
    def focusInEvent(self, QFocusEvent):
        self.emit(SIGNAL('tabSignal()'))

现在可以创建FocusButton对象而不是QPushButton,只要它们获得焦点,它们就会发出tabSignal。