Есть 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.
, поэтому, когдаПередав логическое значение, оно преобразует его в целое число, 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)
Plus:
Если вы просто хотите установить, что виджет имеет фокус, вы должны вызвать вторую функцию:
myPlainTextEdit.setFocus()
И для чистого использования clearFocus()
.