2016-07-08 34 views
1

私は...最小化/最大化ウィンドウコントロールでQt.Toolウィンドウを表示するには?

class ToolWindow(QtWidgets.QMainWindow): 
    """Generic window to be used as non-modal tool 

    Usage: 
     tool_win = ToolWindow() 
     layout = QtWidgets.QHBoxLayout() 
     button = QtWidgets.QPushButton('hello') 
     layout.addWidget(button) 
     tool_win.setup(layout) 
     button.released.connect(lambda: print('hello')) 
     tool_win.show() 
    """ 
    def __init__(self): 
     super(ToolWindow, self).__init__() 

    def setup(self, layout, 
       window_title='Untitled', object_name=None, tool=True): 
     """Setup tool window""" 
     if tool: 
      self.setWindowFlags(QtCore.Qt.Tool) 

     self.widget = QtWidgets.QWidget() 
     self.widget.setLayout(layout) 
     self.setCentralWidget(self.widget) 
     self.setWindowTitle(window_title) 

    def closeEvent(self, event): 
     """Delete object when closed""" 
     self.deleteLater() 

はしかし、私は典型的な最大化を追加し、ウィンドウにウィンドウコントロールを最小限にしたいです。私は成功せずToolWindowクラスに以下を追加しようとしてきました(ツールウィンドウはまだウィンドウコントロールを最小化/最大化表示されません):

self.setWindowFlags(self.windowFlags() | 
        QtCore.Qt.WindowSystemMenuHint | 
        QtCore.Qt.WindowMinMaxButtonsHint) 

ことが可能ですが、ツールウィンドウにこれらのコントロールを追加するには?

また、非モーダルウィンドウを作成できますが、常に親アプリケーションの上にあり、最大化/最小化ウィンドウコントロールを表示できますか?

注:このツールウィンドウは、システム上のすべてのウィンドウの上に置いておきたくありません。私はそれが常に私のアプリケーションの上にとどまりたいと思っています。

+0

このプラットフォームにアクセスする必要があるプラットフォームを指定する必要があります。 – ekhumoro

答えて

0

フラッグなしでQMainWindowクラスを使用するだけで済みます。 ツールウィンドウがプライマリアプリケーションウィンドウの子である限り、そのウィンドウはその上にとどまります(ただし、 "Window Stays On Top"フラグを設定した場合など)。

あなたは、複数のツールのWindows持っていて、それらを特定の順序で上に滞在したい場合は、あなたが持ってmy_tool_window.raise_()を呼び出すことができ、親引数

def __init__(self, parent): 
    super(ToolWindow, self).__init__(parent) 

を受け入れるように__init__を変更する必要がありますそれはzオーダーの最上位にあります。

Qtにはwindow flags exampleが添付されています。それをチェックして、さまざまなフラグがウィンドウの表示と動作にどのように影響するかを確認することができます。

関連する問題