From f4473d78a530a3166e8d9bf27b3af0747f43d182 Mon Sep 17 00:00:00 2001 From: Dominik Demuth Date: Mon, 12 Feb 2024 17:34:37 +0100 Subject: [PATCH 1/4] add textedit to main ui --- src/gui_qt/_py/basewindow.py | 19 +++++++++++++--- src/resources/_ui/basewindow.ui | 39 +++++++++++++++++++-------------- 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/src/gui_qt/_py/basewindow.py b/src/gui_qt/_py/basewindow.py index d916548..ea0c0f2 100644 --- a/src/gui_qt/_py/basewindow.py +++ b/src/gui_qt/_py/basewindow.py @@ -22,8 +22,6 @@ class Ui_BaseWindow(object): self.centralwidget = QtWidgets.QWidget(BaseWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) - self.horizontalLayout.setContentsMargins(3, 3, 3, 3) - self.horizontalLayout.setSpacing(3) self.horizontalLayout.setObjectName("horizontalLayout") self.splitter = QtWidgets.QSplitter(self.centralwidget) self.splitter.setOrientation(QtCore.Qt.Horizontal) @@ -70,8 +68,22 @@ class Ui_BaseWindow(object): self.integralwidget = IntegralWidget() self.integralwidget.setObjectName("integralwidget") self.tabWidget.addTab(self.integralwidget, "") - self.area = MdiAreaTile(self.splitter) + self.verticalLayoutWidget = QtWidgets.QWidget(self.splitter) + self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") + self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setObjectName("verticalLayout") + self.widget = EditorWidget(self.verticalLayoutWidget) + self.widget.setObjectName("widget") + self.verticalLayout.addWidget(self.widget) + self.area = MdiAreaTile(self.verticalLayoutWidget) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.MinimumExpanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.area.sizePolicy().hasHeightForWidth()) + self.area.setSizePolicy(sizePolicy) self.area.setObjectName("area") + self.verticalLayout.addWidget(self.area) self.horizontalLayout.addWidget(self.splitter) BaseWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(BaseWindow) @@ -643,5 +655,6 @@ from ..data.signaledit.editsignalwidget import EditSignalWidget from ..data.valueeditwidget import ValueEditWidget from ..fit.fitwindow import QFitDialog from ..graphs.drawings import DrawingsWidget +from ..lib.codeeditor import EditorWidget from ..lib.mdiarea import MdiAreaTile from ..nmr.t1widget import QT1Widget diff --git a/src/resources/_ui/basewindow.ui b/src/resources/_ui/basewindow.ui index 01987b8..2c48b6a 100644 --- a/src/resources/_ui/basewindow.ui +++ b/src/resources/_ui/basewindow.ui @@ -22,21 +22,6 @@ - - 3 - - - 3 - - - 3 - - - 3 - - - 3 - @@ -125,7 +110,23 @@ - + + + + + + + + + + 0 + 0 + + + + + + @@ -1086,6 +1087,12 @@
..lib.mdiarea
1 + + EditorWidget + QWidget +
..lib.codeeditor
+ 1 +
-- 2.39.2 From 3932e47d13519310ddb6314739bab69787faf52b Mon Sep 17 00:00:00 2001 From: Dominik Demuth Date: Sun, 25 Feb 2024 15:17:04 +0100 Subject: [PATCH 2/4] Revert "add textedit to main ui" This reverts commit f4473d78a530a3166e8d9bf27b3af0747f43d182. --- src/gui_qt/_py/basewindow.py | 19 +++------------- src/resources/_ui/basewindow.ui | 39 ++++++++++++++------------------- 2 files changed, 19 insertions(+), 39 deletions(-) diff --git a/src/gui_qt/_py/basewindow.py b/src/gui_qt/_py/basewindow.py index ea0c0f2..d916548 100644 --- a/src/gui_qt/_py/basewindow.py +++ b/src/gui_qt/_py/basewindow.py @@ -22,6 +22,8 @@ class Ui_BaseWindow(object): self.centralwidget = QtWidgets.QWidget(BaseWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) + self.horizontalLayout.setContentsMargins(3, 3, 3, 3) + self.horizontalLayout.setSpacing(3) self.horizontalLayout.setObjectName("horizontalLayout") self.splitter = QtWidgets.QSplitter(self.centralwidget) self.splitter.setOrientation(QtCore.Qt.Horizontal) @@ -68,22 +70,8 @@ class Ui_BaseWindow(object): self.integralwidget = IntegralWidget() self.integralwidget.setObjectName("integralwidget") self.tabWidget.addTab(self.integralwidget, "") - self.verticalLayoutWidget = QtWidgets.QWidget(self.splitter) - self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") - self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) - self.verticalLayout.setContentsMargins(0, 0, 0, 0) - self.verticalLayout.setObjectName("verticalLayout") - self.widget = EditorWidget(self.verticalLayoutWidget) - self.widget.setObjectName("widget") - self.verticalLayout.addWidget(self.widget) - self.area = MdiAreaTile(self.verticalLayoutWidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.MinimumExpanding) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.area.sizePolicy().hasHeightForWidth()) - self.area.setSizePolicy(sizePolicy) + self.area = MdiAreaTile(self.splitter) self.area.setObjectName("area") - self.verticalLayout.addWidget(self.area) self.horizontalLayout.addWidget(self.splitter) BaseWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(BaseWindow) @@ -655,6 +643,5 @@ from ..data.signaledit.editsignalwidget import EditSignalWidget from ..data.valueeditwidget import ValueEditWidget from ..fit.fitwindow import QFitDialog from ..graphs.drawings import DrawingsWidget -from ..lib.codeeditor import EditorWidget from ..lib.mdiarea import MdiAreaTile from ..nmr.t1widget import QT1Widget diff --git a/src/resources/_ui/basewindow.ui b/src/resources/_ui/basewindow.ui index 2c48b6a..01987b8 100644 --- a/src/resources/_ui/basewindow.ui +++ b/src/resources/_ui/basewindow.ui @@ -22,6 +22,21 @@ + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + @@ -110,23 +125,7 @@ - - - - - - - - - - 0 - 0 - - - - - - + @@ -1087,12 +1086,6 @@
..lib.mdiarea
1 - - EditorWidget - QWidget -
..lib.codeeditor
- 1 -
-- 2.39.2 From e0ba48f900be1e50b854a087a63ffd49fd5a8f09 Mon Sep 17 00:00:00 2001 From: Dominik Demuth Date: Mon, 26 Feb 2024 19:16:34 +0100 Subject: [PATCH 3/4] make primitive handler --- src/gui_qt/lib/utils.py | 2 +- src/gui_qt/main/console.py | 32 ++++++++++++++++++++++++++++++++ src/gui_qt/main/mainwindow.py | 7 +++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/gui_qt/main/console.py diff --git a/src/gui_qt/lib/utils.py b/src/gui_qt/lib/utils.py index 2f06820..5d87d1c 100644 --- a/src/gui_qt/lib/utils.py +++ b/src/gui_qt/lib/utils.py @@ -10,7 +10,7 @@ from ..Qt import QtGui, QtWidgets, QtCore @contextmanager def busy_cursor(): try: - cursor = QtGui.QCursor(QtCore.Qt.ForbiddenCursor) + cursor = QtGui.QCursor(QtCore.Qt.CursorShape.ForbiddenCursor) QtWidgets.QApplication.setOverrideCursor(cursor) yield diff --git a/src/gui_qt/main/console.py b/src/gui_qt/main/console.py new file mode 100644 index 0000000..1ed833b --- /dev/null +++ b/src/gui_qt/main/console.py @@ -0,0 +1,32 @@ +import logging + +from gui_qt.Qt import QtWidgets +from gui_qt.lib.codeeditor import EditorWidget + + +class ConsoleDock(QtWidgets.QDockWidget): + def __init__(self, parent=None): + super().__init__(parent=parent) + + self.code = EditorWidget(self) + self.code.editor.setReadOnly(True) + self.setWidget(self.code) + + +class QTextHandler(logging.Handler): + def __init__(self, parent): + super().__init__() + + self.console = ConsoleDock(parent) + self.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) + + def emit(self, record): + msg = self.format(record) + self.console.code.appendPlainText(msg) + +if __name__ == "__main__": + app = QtWidgets.QApplication([]) + w = ConsoleDock() + w.show() + + app.exec() diff --git a/src/gui_qt/main/mainwindow.py b/src/gui_qt/main/mainwindow.py index d91b3ac..763a287 100644 --- a/src/gui_qt/main/mainwindow.py +++ b/src/gui_qt/main/mainwindow.py @@ -12,6 +12,7 @@ from nmreval.lib.logger import logger from nmreval.io.sessionwriter import NMRWriter from .management import UpperManagement +from .console import ConsoleDock, QTextHandler from ..Qt import QtGui, QtPrintSupport from ..data.shift_graphs import QShift from ..data.signaledit import QPreviewDialog, QBaselineDialog @@ -61,6 +62,10 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): self.fitresult_dialog = None self.eval = None self.editor = None + self.logtext = QTextHandler(self) + logger.addHandler(self.logtext) + + self.addDockWidget(QtCore.Qt.DockWidgetArea.BottomDockWidgetArea, self.logtext.console) self.movedialog = QMover(self) @@ -246,6 +251,8 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): filedialog.set_graphs(self.management.graphs.list()) + raise ValueError('Test') + accepted = filedialog.exec() if accepted: fname = filedialog.selectedFiles() -- 2.39.2 From ccf75891fb7ad3fd58f4edebeee274ad5484b135 Mon Sep 17 00:00:00 2001 From: Dominik Demuth Date: Tue, 27 Feb 2024 15:18:52 +0100 Subject: [PATCH 4/4] pop-up error messages --- src/gui_qt/lib/logger.py | 27 +++++++++++++++++++++++++++ src/gui_qt/main/console.py | 29 ----------------------------- src/gui_qt/main/mainwindow.py | 7 +++---- 3 files changed, 30 insertions(+), 33 deletions(-) diff --git a/src/gui_qt/lib/logger.py b/src/gui_qt/lib/logger.py index 0570d84..e1cb93c 100644 --- a/src/gui_qt/lib/logger.py +++ b/src/gui_qt/lib/logger.py @@ -1,5 +1,8 @@ +import logging from pathlib import Path +from PyQt5 import QtWidgets + from .codeeditor import _make_textformats from ..Qt import QtWidgets, QtCore, QtGui from nmreval.configs import config_paths @@ -113,3 +116,27 @@ class QLog(QtWidgets.QDialog): for lines in text[-100:]: self.plainTextEdit.appendPlainText(lines[:-1]) + + +class ConsoleDock(QtWidgets.QDockWidget): + def __init__(self, parent=None): + super().__init__(parent=parent) + + self.code = QtWidgets.QPlainTextEdit(parent) + self.code.highlight = LogHighlighter(self.code.document()) + self.code.setReadOnly(True) + self.code.setMaximumBlockCount(50) + self.setWidget(self.code) + + +class QTextHandler(logging.Handler): + def __init__(self, parent): + super().__init__() + + self.console = ConsoleDock(parent) + self.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) + + def emit(self, record): + msg = self.format(record) + self.console.code.appendPlainText(msg) + self.console.show() diff --git a/src/gui_qt/main/console.py b/src/gui_qt/main/console.py index 1ed833b..b28b04f 100644 --- a/src/gui_qt/main/console.py +++ b/src/gui_qt/main/console.py @@ -1,32 +1,3 @@ -import logging - -from gui_qt.Qt import QtWidgets -from gui_qt.lib.codeeditor import EditorWidget -class ConsoleDock(QtWidgets.QDockWidget): - def __init__(self, parent=None): - super().__init__(parent=parent) - self.code = EditorWidget(self) - self.code.editor.setReadOnly(True) - self.setWidget(self.code) - - -class QTextHandler(logging.Handler): - def __init__(self, parent): - super().__init__() - - self.console = ConsoleDock(parent) - self.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) - - def emit(self, record): - msg = self.format(record) - self.console.code.appendPlainText(msg) - -if __name__ == "__main__": - app = QtWidgets.QApplication([]) - w = ConsoleDock() - w.show() - - app.exec() diff --git a/src/gui_qt/main/mainwindow.py b/src/gui_qt/main/mainwindow.py index 763a287..7f637d4 100644 --- a/src/gui_qt/main/mainwindow.py +++ b/src/gui_qt/main/mainwindow.py @@ -12,7 +12,7 @@ from nmreval.lib.logger import logger from nmreval.io.sessionwriter import NMRWriter from .management import UpperManagement -from .console import ConsoleDock, QTextHandler +from ..lib.logger import ConsoleDock, QTextHandler from ..Qt import QtGui, QtPrintSupport from ..data.shift_graphs import QShift from ..data.signaledit import QPreviewDialog, QBaselineDialog @@ -62,10 +62,11 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): self.fitresult_dialog = None self.eval = None self.editor = None + self.logtext = QTextHandler(self) logger.addHandler(self.logtext) - self.addDockWidget(QtCore.Qt.DockWidgetArea.BottomDockWidgetArea, self.logtext.console) + self.logtext.console.hide() self.movedialog = QMover(self) @@ -251,8 +252,6 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): filedialog.set_graphs(self.management.graphs.list()) - raise ValueError('Test') - accepted = filedialog.exec() if accepted: fname = filedialog.selectedFiles() -- 2.39.2