- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我注意到,在调用 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()
每个小部件都支持:
你指的是第一个。那么让我们分析一下您指出的内容:
它有效,但并不意味着它是正确的,首先 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/
我注意到,在调用 QtWidgets.setFocus 时,我在 PyCharm 中收到一条警告,指出它需要 Qt.FocusReason 而不是 bool 值。事实上,该方法的文档还指出它需要一个Q
我是一名优秀的程序员,十分优秀!