first try

This commit is contained in:
2022-12-15 09:13:24 +01:00
parent 718806f2f7
commit c9e963ee5d
4 changed files with 132 additions and 0 deletions

36
dictlist.py Normal file
View File

@ -0,0 +1,36 @@
from PyQt5.QtWidgets import QListWidget, QListWidgetItem
class DictList(QListWidget):
def __init__(self, data, *args, **kwargs):
super().__init__(*args, **kwargs)
self.data = {}
self.update(data)
def update(self, data):
for k, v in data.items():
self.add(k, v)
def add(self, key, value):
if key not in self.data:
itm = QListWidgetItem(key)
self.addItem(itm)
self.data[key] = value
def get(self, index):
key = self.get_key(index)
value = self.data[key]
return key, value
def get_value(self, index):
_key, value = self.get(index)
return value
def get_key(self, index): # this relies on dict being ordered
lst = list(self.data)
row = index.row()
return lst[row]

14
grum.py Executable file
View File

@ -0,0 +1,14 @@
#!/usr/bin/env python
import sys
from PyQt5.QtWidgets import QApplication
from mainwin import MainWindow
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec())

47
mainwin.py Normal file
View File

@ -0,0 +1,47 @@
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMainWindow, QSplitter
from dictlist import DictList
from mdi import MDIArea, MDISubWindow
class MainWindow(QMainWindow):
def __init__(self, title="grum.py", *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle(title)
data = {"a": 10, "b": 20, "c": 30, "d": 40}
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)
def on_select_list_item(self, index):
key, value = self.lst.get(index)
#TODO: just a test for dynamic adding
self.lst.add("x", 100)
for sub in self.mdi.subWindowList():
if sub.windowTitle() == key:
self.mdi.setActiveSubWindow(sub)
return
sub = MDISubWindow(key, value)
self.mdi.addSubWindow(sub)
sub.show()

35
mdi.py Normal file
View File

@ -0,0 +1,35 @@
from PyQt5.QtWidgets import QMdiArea, QMdiSubWindow, QAction
from PyQt5.QtWidgets import QTextEdit
class MDIArea(QMdiArea):
def __init__(self, bar, *args, **kwargs):
super().__init__(*args, **kwargs)
menu = bar.addMenu("View")
menu.addAction("Cascade")
menu.addAction("Tiled")
menu.triggered[QAction].connect(self.on_menu_select)
def on_menu_select(self, p):
txt = p.text()
if txt == "Cascade":
self.cascadeSubWindows()
elif txt == "Tiled":
self.tileSubWindows()
class MDISubWindow(QMdiSubWindow):
def __init__(self, title, data, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle(title)
txt = QTextEdit(str(data))
self.setWidget(txt)