[docs]classInternalConsoleModule(Module):FONT_SIZE=10""" Internal console font size """def__init__(self,parent_viewer,**kwargs)->None:super().__init__(parent_viewer,'internal_console',**kwargs)self.console_widget=pyqtw.QTextEdit()self.console_widget.setReadOnly(True)font=pyqtg.QFont("Fira Code",self.FONT_SIZE)self.console_widget.setFont(font)self.console_widget.setMinimumWidth(425)# for k-Wave output# Redirect stdout and stderr to the log widgetself.log_stream=EmittingStream()self.log_stream._text_written.connect(self.append_console)# --- Module specific public attributes ---
[docs]defappend_console(self,message):""" Write a message to the internal console """self.console_widget.append(message)
[docs]defclear_console(self):""" Clear all messages from the internal console """self.console_widget.clear()
# --- Required module attributes ---
[docs]definit_dock(self):""" Called on GUI setup to add a module dock """# Setting up dock layoutself.dock=pyqtw.QDockWidget('Console',self.parent_viewer)self.parent_viewer.addDockWidget(pyqtc.Qt.DockWidgetArea.LeftDockWidgetArea,self.dock)self.dock.visibilityChanged.connect(self._on_console_dock_visibility_change)self.dock_widget=pyqtw.QWidget(self.dock)self.dock.setWidget(self.dock_widget)self.dock_layout=pyqtw.QGridLayout()self.dock_widget.setLayout(self.dock_layout)self.dock_layout.addWidget(self.console_widget,0,0,1,1)# Y, X, w, hself.clear_console_btn=pyqtw.QPushButton('Clear console')self.clear_console_btn.clicked.connect(self.clear_console)self.dock_layout.addWidget(self.clear_console_btn,1,0,1,1)
# --- Module specific attributes ---def_on_console_dock_visibility_change(self,visible):ifvisible:sys.stdout=self.log_streamsys.stderr=self.log_streamelse:sys.stdout=sys.__stdout__sys.stderr=sys.__stderr__