Python/PySide:如何制作一个位于主 window 之上但不遮盖其他小部件的小部件?

Python/PySide: How to make a widget that will stay on top of the main window, but not cover up other widgets?

所以我在另一个程序(The Foundry 的 Hiero)中有一个脚本 运行,我只是制作一个新的 QWidget 对象,然后调用 self.show()

现在,我可以将其设置为 self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint),这样我的 window 将停留在主 window 的顶部,即使您单击主 [=29] 中的某些内容=].

问题是,这是一种您在其中配置设置的弹出窗口 window,它会触发其他 QWidget 弹出窗口。如果我将我的 window 设置为 WindowStaysOnTopHint,我的小部件触发的那些子对话框最终会 我的小部件下面。

在 PySide/PyQt 中有没有办法让 window 停留在主应用程序 window 的 top/keep 焦点上,特别是 一切?

您可以使用 QApplication.focusChanged 信号在选择 Hiero 的主要 window 时提升您的小部件。然后你只需要删除 WindowStaysOnTopHint 标志。

我不熟悉 Hiero 的 API,但我猜你可以尝试类似的方法:

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

希望对您有所帮助!您可以利用旧参数或其他一些方法来确保您的小部件也不会高于其他小部件。