2017-11-09 2 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)' 
관련 문제