Skip to content

Instantly share code, notes, and snippets.

@JKearnsl
Created May 31, 2023 17:01
Show Gist options
  • Save JKearnsl/bd31b19ceacd11c64c6acae0a457d8d9 to your computer and use it in GitHub Desktop.
Save JKearnsl/bd31b19ceacd11c64c6acae0a457d8d9 to your computer and use it in GitHub Desktop.
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())
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())
# 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", "Настройки"))
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