Python PyQt5中的焦点原因?

Python PyQt5中的焦点原因?,python,python-3.x,pyqt,pyqt5,Python,Python 3.x,Pyqt,Pyqt5,我注意到,当调用qtwidts.setFocus时,我在PyCharm中得到一条警告,说它需要Qt.FocusReason而不是布尔值。事实上,该方法的文档还声明它需要一个Qt.FocusReason。但就我个人而言,我找不到任何关于PyQt5的信息 myPlainTextEdit.setFocus(True) 通过传入一个布尔值,该方法工作得非常好,但我想知道这可能是PyQt4的遗留问题,还是仅仅是一个异常?我注意到,在上,它似乎是针对PyQt4的,它说从QFocusEvent获取Focus

我注意到,当调用
qtwidts.setFocus
时,我在PyCharm中得到一条警告,说它需要
Qt.FocusReason
而不是布尔值。事实上,该方法的文档还声明它需要一个
Qt.FocusReason
。但就我个人而言,我找不到任何关于PyQt5的信息

myPlainTextEdit.setFocus(True)
通过传入一个布尔值,该方法工作得非常好,但我想知道这可能是PyQt4的遗留问题,还是仅仅是一个异常?我注意到,在上,它似乎是针对PyQt4的,它说从
QFocusEvent
获取
FocusReason
。在尝试这样做时,我得到了另一个警告<代码>预期的类型“FocusReason”,改为“type”。这会引发一个类型错误,正如人们所预期的那样

myPlainTextEdit.setFocus(QtGui.QFocusEvent.ActionAdded)

似乎不包含用于
Qt.FocusReason
的页面。由于这是非常迂腐的,我并不过分担心是否有解决办法。我很想知道这是什么原因造成的。可以将Qt FocusReason传递给
QtWidgets.setFocus
吗?

每个小部件都支持两个名为
setFocus()
的函数:

你指的是第一个。那么让我们来分析一下你所指出的:

  • 通过传入布尔值,该方法工作得非常好
它可以工作,但并不意味着它是正确的,首先是一个枚举,也就是说,所属的每个元素都与一个数字相关联:

因此,当传递布尔值时,它会将其转换为整数,False为0,True为1,因此
setFocus(True)
等于
setFocus(QtCore.Qt.TabFocusReason)

  • 在尝试这样做时,我得到了另一个警告;预期类型为“FocusReason”,改为“type”。正如人们所料,这会引发一个类型错误

当您意识到
QtGui.QFocusEvent.ActionAdded
不属于该列表时,它会抛出错误。您必须使用上一列表中的值,方法是将
更改为
,并在其前面加上
QtCore
,因为它属于该子模块,例如:

myPlainTextEdit.setFocus(QtCore.Qt.MouseFocusReason)
加号:

如果您只想确定小部件具有焦点,则应调用第二个函数:

myPlainTextEdit.setFocus()

在python中,

bool是
int
的一个子类,因此这里没有真正的神秘之处。从未出现过
setFocus(bool)
过载。始终存在
setFocus()
clearFocus()
,然后在Qt4中添加了
setFocus(Qt:FocusReason)
myPlainTextEdit.setFocus(QtCore.Qt.MouseFocusReason)
myPlainTextEdit.setFocus()