首页 > 解决方案 > 如何切换窗口保持在顶部提示

问题描述

我正在尝试创建一个小部件,如果它保持在顶部,用户应该能够选择它。下面是我想要实现的示例代码。在创建小部件后尝试设置Qt.WindowStaysOnTopHint不起作用:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

app = QApplication([])
win = QWidget()

def toggleTop():
    win.setWindowFlags(Qt.WindowStaysOnTopHint)
    win.show()

button = QPushButton('Top', win)
button.clicked.connect(toggleTop)
win.show()
app.exec_()

但是,如果我在小部件创建期间设置标志,它会完美运行:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

app = QApplication([])
win = QWidget()
win.setWindowFlags(Qt.WindowStaysOnTopHint)
win.show()
app.exec_()

操作系统是 Ubuntu 18.04。

标签: pythonpyqtwindowpyqt5flags

解决方案


您的toggleTop函数当前每次都用相同的标志覆盖所有窗口标志。要切换单个窗口标志,您需要根据标志的当前状态显式重置它:

def toggleTop():
    # get the current state of the flag
    on = bool(win.windowFlags() & Qt.WindowStaysOnTopHint)
    # toggle the state of the flag
    win.setWindowFlag(Qt.WindowStaysOnTopHint, not on)
    win.show()

推荐阅读