2012-10-31 3 views
2

multi dockpyqt : 쌓인 qdockwidgets의 측면에 도킹

나는 멀티 도킹 창을 만들었습니다. 그렇게하기 위해 중앙 위젯을 숨기고 그것을 얻습니다. 그러나 나는 문제가있다. 도킹 위젯이 다른 위젯 위에 놓여 있다면, 그 위젯을 도킹 할 수 없습니다. 위의 그림에서 볼 수 있듯이, 나는 단지 부두 사이에 도킹해야합니다. 어떻게 조정할 수 있습니까? 그것이 내 모든 코드입니다. centralWidget 하나의 dockWidgetArea없이

from PyQt4 import QtCore, QtGui 

class Window(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self)   
     self.resize(800, 600) 
     self.setWindowTitle(QtGui.QApplication.translate("self", "self", None, QtGui.QApplication.UnicodeUTF8)) 
     self.setDockOptions(QtGui.QMainWindow.AnimatedDocks) 
     self.centralwidget = QtGui.QWidget(self) 
     self.centralwidget.hide() 
     self.setCentralWidget(self.centralwidget)   
     self.menubar = QtGui.QMenuBar(self) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21)) 
     self.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(self) 
     self.setStatusBar(self.statusbar) 
     self.dock1Widget = QtGui.QDockWidget(self) 
     self.dock1Widget.setFeatures(QtGui.QDockWidget.AllDockWidgetFeatures) 
     self.dock1Widget.setWindowTitle(QtGui.QApplication.translate("self", "dock1", None, QtGui.QApplication.UnicodeUTF8)) 
     self.dock1WidgetContents = QtGui.QWidget() 
     self.dock1Widget.setWidget(self.dock1WidgetContents) 
     self.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dock1Widget) 
     self.dock2Widget = QtGui.QDockWidget(self) 
     self.dock2Widget.setFeatures(QtGui.QDockWidget.AllDockWidgetFeatures) 
     self.dock2Widget.setWindowTitle(QtGui.QApplication.translate("self", "dock2", None, QtGui.QApplication.UnicodeUTF8)) 
     self.dock2WidgetContents = QtGui.QWidget() 
     self.dock2Widget.setWidget(self.dock2WidgetContents) 
     self.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dock2Widget) 
     self.dock3Widget = QtGui.QDockWidget(self) 
     self.dock3Widget.setFeatures(QtGui.QDockWidget.AllDockWidgetFeatures) 
     self.dock3Widget.setWindowTitle(QtGui.QApplication.translate("self", "dock3", None, QtGui.QApplication.UnicodeUTF8)) 
     self.dock3WidgetContents = QtGui.QWidget() 
     self.dock3Widget.setWidget(self.dock3WidgetContents) 
     self.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dock3Widget) 
     self.dock4Widget = QtGui.QDockWidget(self) 
     self.dock4Widget.setFeatures(QtGui.QDockWidget.AllDockWidgetFeatures) 
     self.dock4Widget.setWindowTitle(QtGui.QApplication.translate("self", "dock4", None, QtGui.QApplication.UnicodeUTF8)) 
     self.dock4WidgetContents = QtGui.QWidget() 
     self.dock4Widget.setWidget(self.dock4WidgetContents) 
     self.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dock4Widget) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.show() 
    app.exec_() 

답변

2

는 모든 방법을 확장하여 다른 모든 도크 지역은 접근 불가 할 수 있습니다.

하나의 가능한 솔루션은 중첩 된 도킹 (AllowNestedDocks)을 사용하는 것입니다. 이렇게하면 도크 위젯을보다 자유롭게 스택시킬 수 있습니다. 정확히 같은 행동은 아니지만 더 유연 할 수 있습니다. 이 같은 도킹 옵션을 설정합니다

self.setDockOptions(QtGui.QMainWindow.AnimatedDocks | QtGui.QMainWindow.AllowNestedDocks) 

을 그건 그렇고, 당신은 중앙 위젯을 원하지 않는 경우, 당신은 단지 을 설정할 수 없습니다. 기본값은 NULL이며 더미 위젯을 설정하고 숨기는 것과 같은 효과가 있습니다.

+0

조언 해 주셔서 감사합니다. 내가 추천 한대로, 나는 내 코드를 다시 썼다. :) –