我正在尝试创建一个用户应该能够选择的小部件,如果它保持在最顶层。下面是我想要实现的示例代码。在创建窗口小部件后尝试设置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。
你的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()