mirror of
https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git
synced 2024-11-16 05:35:43 +08:00
107 lines
4.8 KiB
Python
107 lines
4.8 KiB
Python
|
import os
|
||
|
import sys
|
||
|
|
||
|
from PyQt5 import uic
|
||
|
from PyQt5.QtCore import Qt, QTimer, QDir, QSignalBlocker
|
||
|
from PyQt5.QtGui import QCloseEvent, QIcon
|
||
|
from PyQt5.QtWidgets import (QApplication, QLabel, QCalendarWidget, QFrame, QTreeView,
|
||
|
QTableWidget, QFileSystemModel, QPlainTextEdit, QToolBar,
|
||
|
QWidgetAction, QComboBox, QAction, QSizePolicy, QInputDialog)
|
||
|
|
||
|
from PyQtAds import QtAds
|
||
|
|
||
|
UI_FILE = os.path.join(os.path.dirname(__file__), 'mainwindow.ui')
|
||
|
MainWindowUI, MainWindowBase = uic.loadUiType(UI_FILE)
|
||
|
|
||
|
class MainWindow(MainWindowUI, MainWindowBase):
|
||
|
|
||
|
def __init__(self, parent=None):
|
||
|
super().__init__(parent)
|
||
|
|
||
|
self.setupUi(self)
|
||
|
|
||
|
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.OpaqueSplitterResize, True)
|
||
|
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.XmlCompressionEnabled, False)
|
||
|
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.FocusHighlighting, True)
|
||
|
self.dock_manager = QtAds.CDockManager(self)
|
||
|
|
||
|
# Set central widget
|
||
|
text_edit = QPlainTextEdit()
|
||
|
text_edit.setPlaceholderText("This is the central editor. Enter your text here.")
|
||
|
central_dock_widget = QtAds.CDockWidget("CentralWidget")
|
||
|
central_dock_widget.setWidget(text_edit)
|
||
|
central_dock_area = self.dock_manager.setCentralWidget(central_dock_widget)
|
||
|
central_dock_area.setAllowedAreas(QtAds.DockWidgetArea.OuterDockAreas)
|
||
|
|
||
|
# create other dock widgets
|
||
|
table = QTableWidget()
|
||
|
table.setColumnCount(3)
|
||
|
table.setRowCount(10)
|
||
|
table_dock_widget = QtAds.CDockWidget("Table 1")
|
||
|
table_dock_widget.setWidget(table)
|
||
|
table_dock_widget.setMinimumSizeHintMode(QtAds.CDockWidget.MinimumSizeHintFromDockWidget)
|
||
|
table_dock_widget.resize(250, 150)
|
||
|
table_dock_widget.setMinimumSize(200, 150)
|
||
|
table_area = self.dock_manager.addDockWidget(QtAds.DockWidgetArea.LeftDockWidgetArea, table_dock_widget)
|
||
|
self.menuView.addAction(table_dock_widget.toggleViewAction())
|
||
|
|
||
|
table = QTableWidget()
|
||
|
table.setColumnCount(5)
|
||
|
table.setRowCount(1020)
|
||
|
table_dock_widget = QtAds.CDockWidget("Table 2")
|
||
|
table_dock_widget.setWidget(table)
|
||
|
table_dock_widget.setMinimumSizeHintMode(QtAds.CDockWidget.MinimumSizeHintFromDockWidget)
|
||
|
table_dock_widget.resize(250, 150)
|
||
|
table_dock_widget.setMinimumSize(200, 150)
|
||
|
table_area = self.dock_manager.addDockWidget(QtAds.DockWidgetArea.BottomDockWidgetArea, table_dock_widget, table_area)
|
||
|
self.menuView.addAction(table_dock_widget.toggleViewAction())
|
||
|
|
||
|
properties_table = QTableWidget()
|
||
|
properties_table.setColumnCount(3)
|
||
|
properties_table.setRowCount(10)
|
||
|
properties_dock_widget = QtAds.CDockWidget("Properties")
|
||
|
properties_dock_widget.setWidget(properties_table)
|
||
|
properties_dock_widget.setMinimumSizeHintMode(QtAds.CDockWidget.MinimumSizeHintFromDockWidget)
|
||
|
properties_dock_widget.resize(250, 150)
|
||
|
properties_dock_widget.setMinimumSize(200, 150)
|
||
|
self.dock_manager.addDockWidget(QtAds.DockWidgetArea.RightDockWidgetArea, properties_dock_widget, central_dock_area)
|
||
|
self.menuView.addAction(properties_dock_widget.toggleViewAction())
|
||
|
|
||
|
self.create_perspective_ui()
|
||
|
|
||
|
def create_perspective_ui(self):
|
||
|
save_perspective_action = QAction("Create Perspective", self)
|
||
|
save_perspective_action.triggered.connect(self.save_perspective)
|
||
|
perspective_list_action = QWidgetAction(self)
|
||
|
self.perspective_combobox = QComboBox(self)
|
||
|
self.perspective_combobox.setSizeAdjustPolicy(QComboBox.AdjustToContents)
|
||
|
self.perspective_combobox.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
|
||
|
self.perspective_combobox.activated[str].connect(self.dock_manager.openPerspective)
|
||
|
perspective_list_action.setDefaultWidget(self.perspective_combobox)
|
||
|
self.toolBar.addSeparator()
|
||
|
self.toolBar.addAction(perspective_list_action)
|
||
|
self.toolBar.addAction(save_perspective_action)
|
||
|
|
||
|
def save_perspective(self):
|
||
|
perspective_name, ok = QInputDialog.getText(self, "Save Perspective", "Enter Unique name:")
|
||
|
if not ok or not perspective_name:
|
||
|
return
|
||
|
|
||
|
self.dock_manager.addPerspective(perspective_name)
|
||
|
blocker = QSignalBlocker(self.perspective_combobox)
|
||
|
self.perspective_combobox.clear()
|
||
|
self.perspective_combobox.addItems(self.dock_manager.perspectiveNames())
|
||
|
self.perspective_combobox.setCurrentText(perspective_name)
|
||
|
|
||
|
def closeEvent(self, event: QCloseEvent):
|
||
|
self.dock_manager.deleteLater()
|
||
|
super().closeEvent(event)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
app = QApplication(sys.argv)
|
||
|
|
||
|
w = MainWindow()
|
||
|
w.show()
|
||
|
app.exec_()
|