Python / PySide: как создать виджет, который будет оставаться поверх главного окна, но не будет закрывать другие виджеты? - PullRequest
1 голос
/ 15 апреля 2020

Итак, у меня есть скрипт, работающий внутри другой программы (The Foun dry's Hiero), и я просто создаю новый объект QWidget и вызываю self.show()

Теперь я могу установить его на self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint), поэтому мое окно останется поверх главного окна, даже если вы нажмете на что-то в главном окне.

Проблема в том, что это своего рода всплывающее окно, в котором вы настраиваете параметры в и запускает другие всплывающие окна QWidget. Если я установлю мое окно на WindowStaysOnTopHint, те поддиалоги, которые запускает мой виджет, в конечном итоге будут ниже моего виджета.

Есть ли в PySide / PyQt способ заставить окно оставаться сверху / В особенности сосредоточьтесь на главном окне приложения, но не все ?

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете использовать сигнал QApplication.focusChanged, чтобы поднять ваш виджет вверх, когда выбрано главное окно Hiero. Тогда вам просто нужно убрать флаг WindowStaysOnTopHint.

Я не знаком с API Hiero, но, полагаю, вы можете попробовать что-то вроде:

def raiseMyWidget(old, new):
    if new == hiero.ui.mainWindow():
        myWidget.raise_()
QtWidgets.QApplication.instance().focusChanged.connect(raiseMyWidget)

Надеюсь, это помогает! Вы можете воспользоваться старым параметром или каким-либо другим способом, чтобы убедиться, что ваш виджет не находится выше остальных.

...