переключить флаг QMainWindow WindowStaysOnTopHint pyside

Почему, когда я переключаю SetWindowFlags QMainWindow на WindowStaysOnTopHint, мое окно исчезает и, что более важно, не остается сверху? Я использую PySide и QMainWindow.

import sys
from PySide import QtGui, QtCore

class Browser(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Browser, self).__init__(parent)
        self.resize(200, 150)
        self.setWindowTitle('Assets')
        self.initUI()

    def initUI(self):

        self.mi_stay_on_top = QtGui.QAction('Stay On Top', self)
        self.mi_stay_on_top.setShortcut('Ctrl+T')
        self.mi_stay_on_top.setCheckable(True)
        self.mi_stay_on_top.triggered.connect(self.toggle_stay_on_top)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(self.mi_stay_on_top)

        grid = QtGui.QVBoxLayout()
        grid.setContentsMargins(10,10,10,10)
        self.setLayout(grid)

    def toggle_stay_on_top(self):
        if self.mi_stay_on_top.isChecked():
            # enabled
            self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint)
        else:
            # disable
            self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowStaysOnTopHint)


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Browser()
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

person JokerMartini    schedule 12.01.2017    source источник


Ответы (1)


Метод setWindowFlags сбрасывает родителя, который скрывает окно.

Итак, вам нужно сделать это:

def toggle_stay_on_top(self):
    if self.mi_stay_on_top.isChecked():
        # enabled
        self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint)
    else:
        # disable
        self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowStaysOnTopHint)
    # re-show the window after changing flags
    self.show()
person ekhumoro    schedule 12.01.2017
comment
круто, я подумал и надеялся, что это было что-то простое, что я упустил из виду. спасибо - person JokerMartini; 13.01.2017