我使用PyQt设计应用程序。出于可访问性原因,我想在突出显示按钮时说出按钮的名称(使用按Tab键导航。)
使用Windows Speech API,我的演讲顺利。现在我想使用信号和插槽,但QPushButton似乎没有突出显示的信号。我发现的那些被点击,摧毁,按下,释放,切换。他们都没有工作。
有没有办法设置当按钮突出显示按钮时会发出的自定义信号?
答案 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。