2016-07-08 202 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() 

不過,我想補充典型的最大化和最小化窗口控件的窗口。我已經嘗試添加下面的工具窗口類沒有成功(工具窗口仍然不顯示最大化/最小化窗口控件):

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

是否有可能將這些控件添加到工具窗口?

或者,我可以創建一個非模態窗口,但始終坐在我的父應用程序頂部,並顯示最大化/最小化窗口控件?

請注意,我不希望這個工具窗口停留在我的系統上的所有窗口之上。我只希望它始終保持在我的應用程序之上。

+0

你應該說明需要哪些平臺。 – ekhumoro

回答

0

你應該可以使用沒有任何標誌的QMainWindow類。只要工具窗口是主應用程序窗口的子窗口,它就會保留在其上面(但不是來自其他應用程序的窗口,就像設置「Window Stays On Top」標誌時那樣)。

你需要改變你的__init__接受父參數

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

如果您有多個工具窗口和你希望他們留在上面以特定的順序,可以調用my_tool_window.raise_()帶來它到z順序的頂部。

Qt隨附window flags example。你可能想檢查一下,看看不同的標誌如何影響窗口的顯示和行爲。