У вас проблема XY : вы пытаетесь найти решение (обычно неортодоксальное и чрезмерно сложное) для проблемы, возникшей в другом месте.
Что вы хотите сделать, это показать всплывающие подсказки, даже если окно не сфокусировано, чтобы не восстанавливать фокус окна; чтобы достичь этого, вы не должны повторно активировать окно, когда оно теряет фокус (что не только НЕПРАВИЛЬНО , но является и неправильным способом, и причиной для этого).
Вам просто нужно установить атрибут виджета WA_AlwaysShowToolTips
в окне верхнего уровня (и, разумеется, удалить ненужное переопределение focusOutEvent
).
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.setFocusPolicy(QtCore.Qt.ClickFocus)
self.initUI()
self.setAttribute(QtCore.Qt.WA_AlwaysShowToolTips, True)
Обратите внимание, что атрибут должен быть установленным на виджет, который является окном верхнего уровня , поэтому, если вы не используете QMainWindow или вы абсолютно уверены, что QWidget всегда будет окном, обычно лучше сделать это вместо этого:
self.<b>window()</b>.setAttribute(QtCore.Qt.WA_AlwaysShowToolTips, True)
Кроме того, мигание нормально на windows и не имеет никакого отношения к использованию процессора:
activWindow () : [...] На Windows, если вы вызываете это, когда приложение в данный момент не является активным, оно не сделает его активным окном. Это изменит цвет записи панели задач, чтобы указать, что окно каким-то образом изменилось. Это потому, что Microsoft не позволяет приложению прерывать то, что пользователь в данный момент делает в другом приложении.