python - PyQt5 中的 FocusReason?

标签 python python-3.x pyqt pyqt5

我注意到,在调用 QtWidgets.setFocus 时,我在 PyCharm 中收到一条警告,指出它需要 Qt.FocusReason 而不是 bool 值。事实上,该方法的文档还指出它需要一个Qt.FocusReason。但我怎么也找不到 PyQt5 的任何相关信息。

myPlainTextEdit.setFocus(True)

通过传递 bool 值,该方法工作得非常好,但我想知道这是否可能是 PyQt4 的一些遗留问题,或者只是一个异常现象?我注意到PyQt Sourceforge Documentation ,这似乎适用于 PyQt4,它说从 QFocusEvent 获取 FocusReason。在尝试这样做时,我收到另一个警告; 预期类型为“FocusReason”,却得到了“Type”。 正如人们所预料的那样,这会引发 TypeError。

myPlainTextEdit.setFocus(QtGui.QFocusEvent.ActionAdded)

PyQt5 documentation似乎不包含 Qt.FocusReason 的页面。由于这是非常迂腐的,所以我并不太担心是否没有解决方案。我有兴趣知道是什么原因造成的。是否可以首先将 Qt FocusReason 传递给 QtWidgets.setFocus

最佳答案

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

你指的是第一个。那么让我们分析一下您指出的内容:

  • 通过传入 bool 值,该方法工作得非常好

它有效,但并不意味着它是正确的,首先 Qt::FocusReason 是一个枚举,也就是说所属的每个元素都与一个数字相关联:

Qt::MouseFocusReason          0   A mouse action occurred.
Qt::TabFocusReason            1   The Tab key was pressed.
Qt::BacktabFocusReason        2   A Backtab occurred. The input for this may include the Shift or Control keys; e.g. Shift+Tab.
Qt::ActiveWindowFocusReason   3   The window system made this window either active or inactive.
Qt::PopupFocusReason          4   The application opened/closed a pop-up that grabbed/released the keyboard focus.
Qt::ShortcutFocusReason       5   The user typed a labels buddy shortcut
Qt::MenuBarFocusReason        6   The menu bar took focus.
Qt::OtherFocusReason          7   Another reason, usually application-specific.

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

  • 在尝试执行此操作时,我收到另一个警告;预期类型为“FocusReason”,但得到的是“Type”。正如人们所料,这会引发 TypeError。

    myPlainTextEdit.setFocus(QtGui.QFocusEvent.ActionAdded)
    

如您所知QtGui.QFocusEvent.ActionAdded不属于该列表,因此会抛出错误。您必须通过更改 :: 来使用上一个列表中的值。通过.并添加前缀 QtCore因为它属于该子模块,例如:

myPlainTextEdit.setFocus(QtCore.Qt.MouseFocusReason)

加号:

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

myPlainTextEdit.setFocus()

为了清洁使用 clearFocus() .

关于python - PyQt5 中的 FocusReason?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52862504/

相关文章:

python - 如何使用 python 或 Shell 代码退出 Qapplication (PyQt)

python - 在heroku实例上安装PIL

python - 从 JSON 动态创建 Django > MySQL 的查询字符串

python - 如何提取beautifulsoup中最后一段标签文本?

python - 如何使用 Qt 将一个 Widget 替换为另一个?

python - 使 QGraphisItem 适合 View

python - 强制列表中的数字保留两位小数

python - 列 (0,1,3) 具有混合类型。在导入时指定 dtype 选项或设置 low_memory=False。导入 csv 文件时

python - 字节从 py2 到 py3 的行为变化

python - 如何在 python 中同时运行两个 turtle ?