2017-01-12 19 views
1

なぜQMainWindowのSetWindowFlagsをWindowStaysOnTopHintに切り替えると、ウィンドウが消えてしまいます。私はPySideとQMainWindowを使用しています。QMainWindowを切り替えるWindowStaysOnTopHintフラグpyside

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

答えて

2

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() 
+0

素晴らしい、私は考え出し、それは私が一望できたシンプルなものだった望みました。ありがとう – JokerMartini