Created
May 31, 2023 17:01
-
-
Save JKearnsl/bd31b19ceacd11c64c6acae0a457d8d9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from PyQt6.QtGui import QMouseEvent | |
from src.views.main import MainView | |
class MainController: | |
def __init__(self, model: 'MainModel'): | |
self.model = model | |
self.view = MainView(self, self.model) | |
self.view.show() | |
# states | |
self.old_pos = None | |
def add_tab(self): | |
print('add_tab') | |
def show_maximized(self): | |
if self.view.isMaximized(): | |
self.view.showNormal() | |
else: | |
self.view.showMaximized() | |
def header_mouse_pressed(self, event: QMouseEvent): | |
self.old_pos = event.globalPosition() | |
def header_mouse_moved(self, event: QMouseEvent): | |
delta = (event.globalPosition() - self.old_pos).toPoint() | |
print("-------------------") | |
print(self.view.x(), self.view.y()) | |
self.view.move(self.view.x() + delta.x(), self.view.y() + delta.y()) | |
self.old_pos = event.globalPosition() | |
self.view.update() | |
print(self.view.x(), self.view.y()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
from PyQt6 import QtCore | |
from PyQt6.QtWidgets import QApplication, QStyleFactory | |
from src.models.main import MainModel | |
from src.controllers.main import MainController | |
def main(): | |
QApplication.setDesktopSettingsAware(False) | |
app = QApplication(sys.argv) | |
app.setStyle(QStyleFactory.create("Fusion")) | |
QtCore.QDir.addSearchPath('icons', 'assets/window/icons') | |
model = MainModel() | |
controller = MainController(model) | |
app.exec() | |
if __name__ == '__main__': | |
sys.exit(main()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Form implementation generated from reading ui file 'src/views/main/MainWindow.ui' | |
# | |
# Created by: PyQt6 UI code generator 6.5.0 | |
# | |
# WARNING: Any manual changes made to this file will be lost when pyuic6 is | |
# run again. Do not edit this file unless you know what you are doing. | |
from PyQt6 import QtCore, QtGui, QtWidgets | |
class Ui_MainWindow(object): | |
def setupUi(self, MainWindow): | |
MainWindow.setObjectName("MainWindow") | |
MainWindow.resize(800, 600) | |
MainWindow.setStyleSheet("QMenuBar {\n" | |
" background-color: transparent;\n" | |
"}\n" | |
"\n" | |
"QMenuBar::item {\n" | |
"color : black;\n" | |
"margin-top:4px;\n" | |
"spacing: 3px;\n" | |
"padding: 1px 10px;\n" | |
"background: transparent;\n" | |
"border-radius: 4px;\n" | |
"}\n" | |
"\n" | |
"QMenuBar::item:selected {\n" | |
" color: rgb(247, 247, 247);\n" | |
"background: #a8a8a8;\n" | |
"}\n" | |
"\n" | |
"QMenuBar::item:pressed {\n" | |
"background: #888888;\n" | |
"}\n" | |
"\n" | |
"QMainWindow {\n" | |
" background-color: rgb(220, 226, 218);\n" | |
" border: none;\n" | |
"}\n" | |
"") | |
self.centralwidget = QtWidgets.QWidget(parent=MainWindow) | |
self.centralwidget.setContentsMargins(0, 0, 0, 0) | |
self.centralwidget.setObjectName("centralwidget") | |
self.centralwidget.setStyleSheet(""" | |
QWidget#centralwidget { | |
background-color: rgb(220, 226, 218); | |
border-top-right-radius: 10px; | |
border-top-left-radius: 10px; | |
} | |
""") | |
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) | |
self.verticalLayout.setContentsMargins(0, 0, 0, 0) | |
self.verticalLayout.setObjectName("verticalLayout") | |
MainWindow.setCentralWidget(self.centralwidget) | |
self.headerWidget = QtWidgets.QWidget(parent=self.centralwidget) | |
self.headerWidget.setObjectName("headerWidget") | |
self.headerWidget.setFixedHeight(25) | |
self.headerWidget_layout = QtWidgets.QHBoxLayout(self.headerWidget) | |
self.headerWidget.setLayout(self.headerWidget_layout) | |
self.headerWidget_layout.setContentsMargins(0, 0, 0, 0) | |
self.headerWidget_layout.setObjectName("headerWidget_layout") | |
self.menubar = QtWidgets.QMenuBar(parent=self.headerWidget) | |
self.menubar.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) | |
self.menubar.setObjectName("menubar") | |
self.helpMenu = QtWidgets.QMenu(parent=self.menubar) | |
self.helpMenu.setObjectName("helpMenu") | |
self.fileMenu = QtWidgets.QMenu(parent=self.menubar) | |
self.fileMenu.setObjectName("fileMenu") | |
self.headerWidget_layout.addWidget(self.menubar) | |
self.headerWidget_layout.addStretch(1) | |
self.windowTitle = QtWidgets.QLabel(parent=self.headerWidget) | |
self.windowTitle.setObjectName("windowTitle") | |
self.windowTitle.setStyleSheet(""" | |
QLabel { | |
font-size: 10pt; | |
font-weight: bold; | |
text-align: center; | |
background-color: rgb(255, 255, 255); | |
border-radius: 5px; | |
margin-top: 4px; | |
margin-bottom: 2px; | |
padding-left: 50px; | |
padding-right: 50px; | |
} | |
""") | |
self.windowTitle.setText("Title") | |
self.windowTitle.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) | |
self.windowTitle.setMinimumWidth(300) | |
self.windowTitle.setMaximumWidth(400) | |
self.headerWidget_layout.addWidget(self.windowTitle) | |
self.headerWidget_layout.addStretch(1) | |
self.controlButtonsWidget = QtWidgets.QWidget(parent=self.headerWidget) | |
self.controlButtonsWidget.setObjectName("controlButtonsWidget") | |
self.controlButtonsWidget.setStyleSheet(""" | |
QWidget { | |
background-color: rgb(255, 255, 255); | |
border-radius: 5px; | |
margin-top: 4px; | |
margin-bottom: 0px; | |
margin-right: 5px; | |
padding-left: 5px; | |
padding-right: 5px; | |
} | |
""") | |
self.controlButtonsWidget_layout = QtWidgets.QHBoxLayout(self.controlButtonsWidget) | |
self.controlButtonsWidget.setLayout(self.controlButtonsWidget_layout) | |
self.controlButtonsWidget_layout.setContentsMargins(1, 1, 1, 1) | |
self.controlButtonsWidget_layout.setObjectName("controlButtonsWidget_layout") | |
self.minimizeButton = QtWidgets.QToolButton(parent=self.controlButtonsWidget) | |
self.minimizeButton.setFixedSize(25, 25) | |
self.minimizeButton.setIcon(QtGui.QIcon("icons:minimize.png")) | |
self.minimizeButton.setObjectName("minimizeButton") | |
self.minimizeButton.setStyleSheet(""" | |
QToolButton { | |
background-color: rgb(255, 255, 255); | |
border: none; | |
} | |
QToolButton:hover { | |
background-color: rgb(230, 230, 230); | |
} | |
""") | |
self.controlButtonsWidget_layout.addWidget(self.minimizeButton) | |
self.maximizeButton = QtWidgets.QToolButton(parent=self.controlButtonsWidget) | |
self.maximizeButton.setFixedSize(25, 25) | |
self.maximizeButton.setIcon(QtGui.QIcon("icons:expand.png")) | |
self.maximizeButton.setObjectName("maximizeButton") | |
self.maximizeButton.setStyleSheet(""" | |
QToolButton { | |
background-color: rgb(255, 255, 255); | |
border: none; | |
} | |
QToolButton:hover { | |
background-color: rgb(230, 230, 230); | |
} | |
""") | |
self.controlButtonsWidget_layout.addWidget(self.maximizeButton) | |
self.closeButton = QtWidgets.QToolButton(parent=self.controlButtonsWidget) | |
self.closeButton.setFixedSize(25, 25) | |
self.closeButton.setIcon(QtGui.QIcon("icons:close.png")) | |
self.closeButton.setObjectName("closeButton") | |
self.closeButton.setStyleSheet(""" | |
QToolButton { | |
background-color: rgb(255, 255, 255); | |
border: none; | |
} | |
QToolButton:hover { | |
background-color: rgb(230, 230, 230); | |
} | |
""") | |
self.controlButtonsWidget_layout.addWidget(self.closeButton) | |
self.headerWidget_layout.addWidget(self.controlButtonsWidget) | |
self.centralwidget.layout().addWidget(self.headerWidget) | |
self.centralwidget.layout().addItem( | |
QtWidgets.QSpacerItem(0, 15, QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)) | |
self.aboutProgram = QtGui.QAction(parent=MainWindow) | |
self.aboutProgram.setObjectName("aboutProgram") | |
self.action_2 = QtGui.QAction(parent=MainWindow) | |
self.action_2.setObjectName("action_2") | |
self.open = QtGui.QAction(parent=MainWindow) | |
self.open.setObjectName("open") | |
self.save_as = QtGui.QAction(parent=MainWindow) | |
self.save_as.setObjectName("save_as") | |
self.new_file = QtGui.QAction(parent=MainWindow) | |
self.new_file.setObjectName("new_file") | |
self.close = QtGui.QAction(parent=MainWindow) | |
self.close.setObjectName("close") | |
self.exit = QtGui.QAction(parent=MainWindow) | |
self.exit.setObjectName("exit") | |
self.settings = QtGui.QAction(parent=MainWindow) | |
self.settings.setObjectName("settings") | |
self.helpMenu.addAction(self.aboutProgram) | |
self.fileMenu.addAction(self.new_file) | |
self.fileMenu.addAction(self.open) | |
self.fileMenu.addAction(self.save_as) | |
self.fileMenu.addSeparator() | |
self.fileMenu.addAction(self.settings) | |
self.fileMenu.addAction(self.close) | |
self.fileMenu.addSeparator() | |
self.fileMenu.addAction(self.exit) | |
self.menubar.addAction(self.fileMenu.menuAction()) | |
self.menubar.addAction(self.helpMenu.menuAction()) | |
self.retranslateUi(MainWindow) | |
QtCore.QMetaObject.connectSlotsByName(MainWindow) | |
def retranslateUi(self, MainWindow): | |
_translate = QtCore.QCoreApplication.translate | |
MainWindow.setWindowTitle(_translate("MainWindow", "CompMath")) | |
self.helpMenu.setTitle(_translate("MainWindow", "Справка")) | |
self.fileMenu.setTitle(_translate("MainWindow", "Файл")) | |
self.aboutProgram.setText(_translate("MainWindow", "О СompMath")) | |
self.action_2.setText(_translate("MainWindow", "Язык")) | |
self.open.setText(_translate("MainWindow", "Открыть...")) | |
self.save_as.setText(_translate("MainWindow", "Сохранить как")) | |
self.new_file.setText(_translate("MainWindow", "Новый...")) | |
self.close.setText(_translate("MainWindow", "Закрыть")) | |
self.exit.setText(_translate("MainWindow", "Выход")) | |
self.settings.setText(_translate("MainWindow", "Настройки")) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from PyQt6 import QtGui, QtWidgets | |
from PyQt6.QtCore import Qt | |
from PyQt6.QtGui import QRegion, QPainter, QColor, QGuiApplication | |
from PyQt6.QtWidgets import QMainWindow | |
from src.utils.observer import DObserver | |
from src.utils.ts_meta import TSMeta | |
from src.views.main.MainWindow import Ui_MainWindow | |
from src.models.main import MainModel | |
from src.widgets.tabwidget import TabContainer | |
class MainView(QMainWindow, DObserver, metaclass=TSMeta): | |
def __init__(self, controller, model: MainModel, parent=None): | |
super(QMainWindow, self).__init__(parent) | |
self.controller = controller | |
self.model = model | |
self.ui = Ui_MainWindow() | |
self.ui.setupUi(self) | |
tab_widget = TabContainer() | |
self.ui.centralwidget.layout().addWidget(tab_widget) | |
self.setWindowFlag(Qt.WindowType.FramelessWindowHint, True) | |
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground, True) | |
# Регистрация представлений | |
self.model.add_observer(self) | |
# События | |
self.ui.closeButton.clicked.connect(self.close) | |
self.ui.close.triggered.connect(self.close) | |
self.ui.minimizeButton.clicked.connect(self.showMinimized) | |
self.ui.maximizeButton.clicked.connect(self.controller.show_maximized) | |
self.ui.headerWidget.mousePressEvent = self.controller.header_mouse_pressed | |
self.ui.headerWidget.mouseMoveEvent = self.controller.header_mouse_moved | |
def model_changed(self): | |
pass |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment