2017-09-23 6 views
1

私はドックアナロジーが好きで、ユーザーはトップ、ボトム、サイドのウィジェットと同様に、2つの大きな「中央」ウィジェットを必要としていると信じています。ドックのウィジェットにはラベルが付いていることも好きです。 QDockWidget( "ファイルシステムビューア")。単一のセントラルウィジェットの代わりにドックの場所を追加する簡単で現在の方法はありますか? This threadは一度利用可能でしたが、今はお勧めできません。そうでない場合は、中央ウィジェットにラベルを付けてドックのように見える方法がありますか?PySideを使用してドックの場所を増やしますか?

答えて

1

あなたがリンクした答えは、すでに中心のウィジェットとしてQMainWindowを設定する解決策を提供しています。この中央ウィジェットは、ドックウィジェットのみを持つ必要があり、独自のウィジェットはありません。

このアプローチにはいくつかの制限があります。まず、中央のドックウィジェットと外側のドックウィジェットを入れ替えることはできません(またその逆もあります)。第2に、すべて外部ドックウィジェットが閉じられている場合、メインウィンドウにメニューバーがない限り、復元できません。メニューバーには、ドックウィジェットを復元するためのコンテキストメニューが自動的に表示されます。これは、ドックウィジェットのタイトルバーを右クリックしたときに表示されるのと同じメニューです。ここで

は、このアプローチを実証デモスクリプトです:

import sys 
from PySide import QtGui, QtCore 

class MainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     super(MainWindow, self).__init__() 
     self.centre = QtGui.QMainWindow(self) 
     self.centre.setWindowFlags(QtCore.Qt.Widget) 
     self.centre.setDockOptions(
      QtGui.QMainWindow.AnimatedDocks | 
      QtGui.QMainWindow.AllowNestedDocks) 
     self.setCentralWidget(self.centre) 
     self.dockCentre1 = QtGui.QDockWidget(self.centre) 
     self.dockCentre1.setWindowTitle('Centre 1') 
     self.centre.addDockWidget(
      QtCore.Qt.LeftDockWidgetArea, self.dockCentre1) 
     self.dockCentre2 = QtGui.QDockWidget(self.centre) 
     self.dockCentre2.setWindowTitle('Centre 2') 
     self.centre.addDockWidget(
      QtCore.Qt.RightDockWidgetArea, self.dockCentre2) 
     self.dockLeft = QtGui.QDockWidget(self) 
     self.dockLeft.setWindowTitle('Left') 
     self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.dockLeft) 
     self.dockRight = QtGui.QDockWidget(self) 
     self.dockRight.setWindowTitle('Right') 
     self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.dockRight) 
     self.menuBar().addMenu('File').addAction('Quit', self.close) 

if __name__ == '__main__': 

    app = QtGui.QApplication(sys.argv) 
    window = MainWindow() 
    window.setGeometry(500, 50, 600, 400) 
    window.show() 
    sys.exit(app.exec_()) 
+0

これはまだ最善のアプローチであれば、私はそれを使用します。あなたのコードは完全に機能します。ありがとうございました。 – davideps

関連する問題