82 lines
1.9 KiB
Python
82 lines
1.9 KiB
Python
from PyQt5.QtCore import Qt
|
|
from PyQt5.QtWidgets import QMdiArea, QMdiSubWindow, QAction
|
|
from PyQt5.QtGui import QPainter
|
|
import pyqtgraph as pg
|
|
|
|
import assets
|
|
from theme import MDI_BKG
|
|
|
|
|
|
class MDIArea(QMdiArea):
|
|
|
|
def __init__(self, bar, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.logo = assets.logo()
|
|
self._add_menu(bar)
|
|
|
|
|
|
def _add_menu(self, bar):
|
|
menu = bar.addMenu("&Windows")
|
|
menu.addAction("Cascade")
|
|
menu.addAction("Tile")
|
|
menu.addSeparator()
|
|
menu.addAction("Close All")
|
|
menu.triggered[QAction].connect(self.on_menu_select)
|
|
|
|
self.actions = {
|
|
"Cascade": self.cascadeSubWindows,
|
|
"Tile": self.tileSubWindows,
|
|
"Close All": self.closeAllSubWindows
|
|
}
|
|
|
|
|
|
def on_menu_select(self, p):
|
|
txt = p.text()
|
|
self.actions[txt]()
|
|
|
|
|
|
def paintEvent(self, _event):
|
|
self._draw_watermark()
|
|
|
|
|
|
def _draw_watermark(self):
|
|
painter = QPainter()
|
|
vport = self.viewport()
|
|
painter.begin(vport)
|
|
|
|
rect = self.rect()
|
|
painter.fillRect(rect, MDI_BKG)
|
|
|
|
margin = 20
|
|
logo = self.logo
|
|
logo_width = logo.width()
|
|
logo_height = logo.height()
|
|
painter.drawPixmap(
|
|
self.width() - logo_width - margin,
|
|
self.height() - logo_height - margin,
|
|
logo_width,
|
|
logo_height,
|
|
logo
|
|
)
|
|
|
|
painter.end()
|
|
|
|
|
|
|
|
class MDISubPlot(QMdiSubWindow):
|
|
|
|
def __init__(self, title, desc, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.setWindowTitle(title)
|
|
self.setWindowIcon(assets.char())
|
|
|
|
# without this, the SubWindow is not removed from the subWindowList
|
|
self.setAttribute(Qt.WA_DeleteOnClose)
|
|
|
|
plt = pg.PlotWidget()
|
|
self.plot = desc.make_plot(plt)
|
|
self.setWidget(plt)
|
|
|
|
|
|
|