【问题标题】:How to toggle window stays on top hint如何切换窗口保持在顶部提示
【发布时间】:2019-04-12 14:48:00
【问题描述】:

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

【问题讨论】:

    标签: python pyqt window pyqt5 flags


    【解决方案1】:

    您的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()
    

    【讨论】:

    • win.setWindowFlags(win.windowFlags() ^ Qt.WindowStaysOnTopHint) 就足够了。不需要on = ... 行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2023-03-09
    • 2011-03-15
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多