You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
4.3 KiB
Python
120 lines
4.3 KiB
Python
from PyQt5.QtWidgets import *
|
|
from PyQt5.QtCore import Qt, QSize, QFile
|
|
from PyQt5.QtGui import QIcon, QColor
|
|
from PyQt5 import QtGui
|
|
from DcsUi.GetQss import CommonHelper
|
|
import os
|
|
|
|
|
|
class NewDockWidget(QDockWidget):
|
|
def __init__(self, title, parent=None):
|
|
QDockWidget.__init__(self, parent = parent)
|
|
parent.toolBar = QToolBar()
|
|
self.DockTitleBar = DockTitleBar
|
|
self.setTitleBarWidget(self.DockTitleBar(parent, title))
|
|
self.setObjectName(title)
|
|
self.setWindowTitle(title)
|
|
# self.setStyleSheet('''border: 1.5px ridge #484848;
|
|
# background:#444444;''')
|
|
|
|
def changeTitle(self, title):
|
|
self.titleBarWidget().label.setText(title)
|
|
|
|
|
|
class DockTitleBar(QFrame):
|
|
def __init__(self, parent, title):
|
|
super(DockTitleBar, self).__init__(parent)
|
|
self.window = parent
|
|
|
|
qssStyle = CommonHelper.getQss()
|
|
self.setStyleSheet(qssStyle)
|
|
|
|
self.setFrameStyle(QFrame.Raised | QFrame.StyledPanel)
|
|
|
|
# 标题栏布局
|
|
layout = QHBoxLayout(self)
|
|
layout.setContentsMargins(0,0,0,0)
|
|
|
|
# 设置标题栏标题
|
|
self.label = QLabel(title)
|
|
# self.label.setStyleSheet('''
|
|
# border: 0px;
|
|
# border-radius: 0px;
|
|
# padding: 0px;''')
|
|
# 设置标题栏按钮
|
|
iconSize = QApplication.style().standardIcon(
|
|
QStyle.SP_TitleBarNormalButton).actualSize(
|
|
QSize(20, 20))
|
|
buttonSize = iconSize + QSize(5, 5)
|
|
|
|
# 最小化dock按钮
|
|
self.minButton = QToolButton(self)
|
|
self.minButton.setAutoRaise(True)
|
|
self.minButton.setMaximumSize(buttonSize)
|
|
self.minButton.setIcon(QApplication.style().standardIcon(
|
|
QStyle.SP_TitleBarMinButton))
|
|
self.minButton.clicked.connect(self.minClicked)
|
|
|
|
#最大化dock按钮
|
|
self.maxButton = QToolButton(self)
|
|
self.maxButton.setAutoRaise(True)
|
|
self.maxButton.setMaximumSize(buttonSize)
|
|
self.maxButton.setIcon(QApplication.style().standardIcon(
|
|
QStyle.SP_TitleBarMaxButton))
|
|
self.maxButton.clicked.connect(self.maxClicked)
|
|
self.whetherPress = 0
|
|
|
|
# dock还原事件
|
|
self.restoreAction = QAction(title, parent)
|
|
self.restoreAction.triggered.connect(self.ViewDock)
|
|
|
|
# 布局设置
|
|
layout.addWidget(self.label)
|
|
layout.addStretch()
|
|
layout.addWidget(self.minButton)
|
|
layout.addWidget(self.maxButton)
|
|
|
|
def minClicked(self):
|
|
# 最小化事件
|
|
self.parent().setVisible(False)
|
|
self.window.addToolBar(Qt.BottomToolBarArea,self.window.toolBar) # 工具栏添加还原按钮
|
|
self.window.toolBar.addAction(self.restoreAction) # 工具栏添加还原事件
|
|
|
|
def maxClicked(self):
|
|
# 最大化事件
|
|
if self.whetherPress == 0: # 判断是否最大化
|
|
if self.parent() == self.window.dockTop:
|
|
self.window.dockBottom.setVisible(False)
|
|
self.window.dockLeft.setVisible(False)
|
|
elif self.parent() == self.window.dockBottom:
|
|
self.window.dockTop.setVisible(False)
|
|
self.window.dockLeft.setVisible(False)
|
|
else:
|
|
self.window.dockTop.setVisible(False)
|
|
self.window.dockBottom.setVisible(False)
|
|
self.parent().showMaximized()
|
|
self.whetherPress = 1 # 设置为已经最大化
|
|
self.maxButton.setIcon(QApplication.style().standardIcon(
|
|
QStyle.SP_TitleBarNormalButton))
|
|
else:
|
|
if self.parent() == self.window.dockTop:
|
|
self.window.dockBottom.setVisible(True)
|
|
self.window.dockLeft.setVisible(True)
|
|
elif self.parent() == self.window.dockBottom:
|
|
self.window.dockTop.setVisible(True)
|
|
self.window.dockLeft.setVisible(True)
|
|
else:
|
|
self.window.dockTop.setVisible(True)
|
|
self.window.dockBottom.setVisible(True)
|
|
|
|
self.whetherPress = 0
|
|
self.parent().setFloating(False)
|
|
self.maxButton.setIcon(QApplication.style().standardIcon(
|
|
QStyle.SP_TitleBarMaxButton))
|
|
|
|
def ViewDock(self):
|
|
# 还原dock
|
|
self.parent().setVisible(True)
|
|
self.window.toolBar.removeAction(self.restoreAction)
|
|
|