140 lines
4.0 KiB
Python
140 lines
4.0 KiB
Python
from PublicReference.view.Page import Page
|
|
|
|
from PyQt5.QtCore import *
|
|
from PyQt5.QtWidgets import *
|
|
from PyQt5.QtGui import *
|
|
from ..utils.constant import 标题背景, 标题字体
|
|
|
|
# title bar
|
|
TITLE_BAR_HEIGHT = 25
|
|
TITLE_BUTTON_SIZE = 25
|
|
TITLE_LABEL_SIZE = 25
|
|
TITLE_BUTTON_WIDTH = 25
|
|
TITLE_BUTTON_HEIGHT = 25
|
|
TITLE_ICON_MAG = 10
|
|
|
|
RES_PATH = './ResourceFiles/img/UI/'
|
|
|
|
TITLE_MIN_ICON = RES_PATH + "min.png"
|
|
TITLE_CLS_ICON = RES_PATH + "exit.png"
|
|
|
|
WINDOW_DEFAULT_WIDTH = 800
|
|
WINDOW_DEFAULT_HEIGHT = 480
|
|
|
|
|
|
class Dialog(QMainWindow):
|
|
def __init__(self, client: Page):
|
|
super().__init__()
|
|
|
|
self.hideOnClose = False
|
|
|
|
icon = client.windowIcon()
|
|
|
|
titleBar = self.createTitleBar()
|
|
|
|
titleBar.setTitle(client.windowTitle())
|
|
titleBar.setWidth(client.width())
|
|
|
|
titleBar.setIcon(icon.pixmap(icon.actualSize(QSize(32, 32))))
|
|
|
|
lay = QVBoxLayout()
|
|
lay.addWidget(titleBar)
|
|
lay.addWidget(client)
|
|
lay.setStretch(1, 100)
|
|
lay.setSpacing(0)
|
|
lay.setContentsMargins(0, 0, 0, 0)
|
|
|
|
center = QWidget(self)
|
|
center.setLayout(lay)
|
|
|
|
self.setCentralWidget(center)
|
|
self.setWindowTitle(client.windowTitle())
|
|
self.setWindowIcon(icon)
|
|
self.setWindowFlags(Qt.FramelessWindowHint)
|
|
|
|
def createTitleBar(self):
|
|
titleBar = QWidget()
|
|
titleBar.setStyleSheet('''QWidget{background:transparent}''')
|
|
label = QLabel(titleBar)
|
|
label.setStyleSheet(标题背景)
|
|
iconLabel = QLabel(titleBar)
|
|
titleLabel = QLabel(titleBar)
|
|
iconLabel.setText('纸飞机计算器')
|
|
# self.titleLabel.setStyleSheet('''QLabel{color:#9f8d5c}''')
|
|
|
|
minButton = QPushButton(titleBar)
|
|
# restoreButton = QPushButton(self)
|
|
closeButton = QPushButton(titleBar)
|
|
|
|
minButton.setFixedSize(TITLE_BUTTON_SIZE, TITLE_BUTTON_SIZE)
|
|
# self.restoreButton.setFixedSize(TITLE_BUTTON_SIZE, TITLE_BUTTON_SIZE);
|
|
closeButton.setFixedSize(TITLE_BUTTON_SIZE, TITLE_BUTTON_SIZE)
|
|
|
|
iconLabel.setFixedSize(TITLE_LABEL_SIZE, TITLE_LABEL_SIZE)
|
|
iconLabel.setStyleSheet(标题字体)
|
|
|
|
titleLabel.setFixedHeight(TITLE_LABEL_SIZE)
|
|
titleLabel.setStyleSheet(标题字体)
|
|
|
|
iconLabel.setAlignment(Qt.AlignCenter)
|
|
titleLabel.setAlignment(Qt.AlignCenter)
|
|
|
|
minButton.setIcon(QIcon(TITLE_MIN_ICON))
|
|
closeButton.setIcon(QIcon(TITLE_CLS_ICON))
|
|
|
|
minButton.clicked.connect(self.showMinimized)
|
|
# self.restoreButton.clicked.connect(self.ShowRestoreWindow)
|
|
closeButton.clicked.connect(self.close)
|
|
|
|
lay = QHBoxLayout(titleBar)
|
|
|
|
lay.setSpacing(0)
|
|
lay.setContentsMargins(0, 0, 0, 0)
|
|
|
|
lay.addWidget(iconLabel)
|
|
lay.addWidget(titleLabel)
|
|
lay.addWidget(minButton)
|
|
# self.lay.addWidget(self.restoreButton)
|
|
lay.addWidget(closeButton)
|
|
|
|
titleBar.setLayout(lay)
|
|
|
|
def setTitle(text):
|
|
titleLabel.setText(text)
|
|
|
|
def setTitleStyle(style):
|
|
titleLabel.setStyleSheet(style)
|
|
|
|
def setIcon(icon):
|
|
iconLabel.setPixmap(
|
|
icon.scaled(iconLabel.size() -
|
|
QSize(TITLE_ICON_MAG, TITLE_ICON_MAG)))
|
|
|
|
def setWidth(width):
|
|
label.resize(width, TITLE_BAR_HEIGHT)
|
|
|
|
titleBar.setTitle = setTitle
|
|
titleBar.setTitleStyle = setTitleStyle
|
|
titleBar.setIcon = setIcon
|
|
titleBar.setWidth = setWidth
|
|
|
|
return titleBar
|
|
|
|
def setHideOnClose(self, hideOnClose):
|
|
self.hideOnClose = hideOnClose
|
|
|
|
def showEvent(self, event):
|
|
parent = self.parent()
|
|
if parent is not None:
|
|
rect = parent.geometry()
|
|
x = rect.x() + rect.width() / 2 - self.width() / 2
|
|
y = rect.y() + rect.height() / 2 - self.height() / 2
|
|
self.move(int(x), int(y))
|
|
return super().showEvent(event)
|
|
|
|
def closeEvent(self, event):
|
|
if (self.hideOnClose):
|
|
self.hide()
|
|
return
|
|
return super().closeEvent(event)
|