Files
grum/mdi.py
T
2022-12-19 12:28:51 +01:00

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)