#python #pyqt #window #pyqt5 #flags
#python #pyqt #окно #pyqt5 #флаги
Вопрос:
Я пытаюсь создать виджет, который пользователь должен иметь возможность выбирать, если он остается сверху. Ниже приведен пример кода того, чего я пытаюсь достичь. Попытка установить 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.
Ответ №1:
В настоящее время ваша toggleTop
функция перезаписывает все флаги окна одним и тем же флагом каждый раз. Чтобы переключить флаг одного окна, вам необходимо явно сбросить его на основе текущего состояния флага:
def toggleTop():
# get the current state of the flag
on = bool(win.windowFlags() amp; Qt.WindowStaysOnTopHint)
# toggle the state of the flag
win.setWindowFlag(Qt.WindowStaysOnTopHint, not on)
win.show()
Комментарии:
1.
win.setWindowFlags(win.windowFlags() ^ Qt.WindowStaysOnTopHint)
достаточно.on = ...
Строка не нужна.