2017-11-09 7 views
2

ドッキングされたウィジェットをすべてPySideで収集する方法はありますか?メインウィンドウの左または右にドッキングされていますか?すべてのドッキングされたウィジェットとそれらの場所を収集する

私の最初の質問に答えがない場合、ウィジェットが左か右にドッキングされているかどうかを少なくともどのように調べることができますか?

from PySide import QtCore, QtGui 


class MainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     super(MainWindow, self).__init__() 

     self.textEdit = QtGui.QTextEdit() 
     self.setCentralWidget(self.textEdit) 

     self.createActions() 
     self.createMenus() 
     self.createToolBars() 
     self.createStatusBar() 
     self.createDockWindows() 

     self.setWindowTitle("Dock Widgets") 

    def createActions(self): 
     self.toggleLeftAct = QtGui.QAction(
       "&Toggle Left", self, shortcut=QtGui.QKeySequence("Ctrl+L"), 
       statusTip="Toggle Left Sidebar", 
       triggered=self.toggleLeft) 

     self.toggleRightAct = QtGui.QAction(
       "&Toggle Right", self, shortcut=QtGui.QKeySequence("Ctrl+R"), 
       statusTip="Toggle Right Sidebar", 
       triggered=self.toggleRight) 

    def createMenus(self): 
     self.fileMenu = self.menuBar().addMenu("&File") 
     self.fileMenu.addAction(self.toggleLeftAct) 
     self.fileMenu.addAction(self.toggleRightAct) 

     self.viewMenu = self.menuBar().addMenu("&View") 

    def createToolBars(self): 
     self.fileToolBar = self.addToolBar("File") 
     self.fileToolBar.addAction(self.toggleLeftAct) 
     self.fileToolBar.addAction(self.toggleRightAct) 

    def createStatusBar(self): 
     self.statusBar().showMessage("Ready") 

    def createDockWindows(self): 
     self.dockCustomers = QtGui.QDockWidget("Customers", self) 
     self.dockCustomers.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea) 
     self.customerList = QtGui.QListWidget(self.dockCustomers) 
     self.dockCustomers.setWidget(self.customerList) 
     self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.dockCustomers) 
     self.viewMenu.addAction(self.dockCustomers.toggleViewAction()) 

     self.dockParagraphs = QtGui.QDockWidget("Paragraphs", self) 
     self.paragraphsList = QtGui.QListWidget(self.dockParagraphs) 
     self.dockParagraphs.setWidget(self.paragraphsList) 
     self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.dockParagraphs) 
     self.viewMenu.addAction(self.dockParagraphs.toggleViewAction()) 

    def toggleLeft(self): 
     print self.dockCustomers 
     print self.dockParagraphs 

    def toggleRight(self): 
     print 'toggle Right' 

if __name__ == '__main__': 

    import sys 

    app = QtGui.QApplication(sys.argv) 
    mainWin = MainWindow() 
    mainWin.show() 
    sys.exit(app.exec_()) 

答えて

2

ドックウィジェットのリストを取得する便利な方法はありません。しかし、ドックウィジェットが追加されるたびに、それが自動的にメインウィンドウにリペアレントされますので、あなたが代わりにメインウィンドウのfindChildren方法を使用することができます。

for dock in self.findChildren(QtGui.QDockWidget): 
    print(dock.windowTitle()) 

ドックウィジェットが現在位置するエリアメインウィンドウのdockWidgetAreaメソッドで見つけることができます。

area = self.dockWidgetArea(dock) 
    if area == QtCore.Qt.LeftDockWidgetArea: 
     print dock.windowTitle(), '(Left)' 
    elif area == QtCore.Qt.RightDockWidgetArea: 
     print dock.windowTitle(), '(Right)' 
関連する問題