Files
grum/mainwin.py
T

87 lines
2.2 KiB
Python

import numpy as np
from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtWidgets import QMainWindow, QSplitter
import assets
from dictlist import DictList
from mdi import MDIArea, MDISubPlot
from rpcserverthread import RPCServerThread
X = np.arange(100) / 10
class MainWindow(QMainWindow):
sig_make_new_plot = pyqtSignal(str, list)
def __init__(self, *args, title="grum", **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle(title)
self.setWindowIcon(assets.icon())
data = {
"sine": [X, np.sin(X)],
"cosine": [X, np.cos(X)],
"exp": [X, np.exp(X)],
"log": [X, np.log(X+1)]
}
data = {k: zip(*v) for k, v in data.items()} # due to the appending of xy pairs, data needs to be transposed
self.lst = lst = DictList(data)
lst.setAlternatingRowColors(True)
lst.doubleClicked.connect(self.on_select_list_item)
self.setCentralWidget(lst)
bar = self.menuBar()
self.mdi = mdi = MDIArea(bar)
splitter = QSplitter(Qt.Horizontal)
splitter.addWidget(lst)
splitter.addWidget(mdi)
splitter.setSizes([100, 1000])
self.setCentralWidget(splitter)
rst = RPCServerThread("localhost", 8000)
rst.start()
rst.server.register_function(self.append)
self.sig_make_new_plot.connect(self.make_new_plot)
def append(self, name, xy):
lst = self.lst
show_it = (name not in lst.data)
lst.append(name, xy)
for sub in self.mdi.subWindowList():
if sub.windowTitle() == name:
data = lst.data[name]
data = list(zip(*data))
sub.plot.setData(*data)
if show_it:
data = lst.data[name]
self.sig_make_new_plot.emit(name, data)
def on_select_list_item(self, index):
key, value = self.lst.get(index)
for sub in self.mdi.subWindowList():
if sub.windowTitle() == key:
self.mdi.setActiveSubWindow(sub)
return
self.make_new_plot(key, value)
def make_new_plot(self, key, value):
sub = MDISubPlot(key, value)
self.mdi.addSubWindow(sub)
sub.show()