def __init__(self, verbose, *arg, **kw): super(LoggerWindow, self).__init__(*arg, **kw) QtWidgets.QApplication.instance().aboutToQuit.connect(self.shutdown) self.setWindowTitle(self.tr("Photini error logging")) self.setLayout(QtWidgets.QGridLayout()) self.layout().setRowStretch(0, 1) self.layout().setColumnStretch(0, 1) # main dialog area self.text = QtWidgets.QTextEdit() self.text.setReadOnly(True) self.text.setMinimumWidth(self.text.fontMetrics().width('x' * 70)) self.layout().addWidget(self.text, 0, 0, 1, 3) # save button save_button = QtWidgets.QPushButton(self.tr('Save')) save_button.clicked.connect(self.save) self.layout().addWidget(save_button, 1, 1) # dismiss button dismiss_button = QtWidgets.QPushButton(self.tr('Dismiss')) dismiss_button.clicked.connect(self.hide) self.layout().addWidget(dismiss_button, 1, 2) # Python logger self.logger = logging.getLogger('') for handler in list(self.logger.handlers): self.logger.removeHandler(handler) self.logger.setLevel(max(logging.ERROR - (verbose * 10), 1)) self.stream_proxy = StreamProxy(self) self.stream_proxy.write_text.connect(self.write) self.stream_proxy.flush_text.connect(self.flush) handler = logging.StreamHandler(self.stream_proxy) handler.setFormatter( logging.Formatter( '%(asctime)s: %(levelname)s: %(name)s: %(message)s', datefmt='%H:%M:%S')) if verbose > 0: handler.addFilter(LoggerFilter(verbose)) self.logger.addHandler(handler) # intercept stdout and stderr, if they exist if sys.stderr: sys.stderr = OutputInterceptor('stderr', sys.stderr) if sys.stdout: sys.stdout = OutputInterceptor('stdout', sys.stdout)
def __init__(self, verbose, *arg, **kw): super(LoggerWindow, self).__init__(*arg, **kw) QtWidgets.QApplication.instance().aboutToQuit.connect(self.shutdown) self.setWindowTitle(self.tr("Photini error logging")) self.setLayout(QtWidgets.QVBoxLayout()) # main dialog area self.text = QtWidgets.QTextEdit() self.text.setReadOnly(True) self.text.setMinimumWidth(width_for_text(self.text, 'x' * 70)) self.layout().addWidget(self.text) # buttons button_box = QtWidgets.QDialogButtonBox( QtWidgets.QDialogButtonBox.Save | QtWidgets.QDialogButtonBox.Close) button_box.button(QtWidgets.QDialogButtonBox.Save).clicked.connect( self.save) button_box.button(QtWidgets.QDialogButtonBox.Close).clicked.connect( self.hide) self.layout().addWidget(button_box) # Python logger self.logger = logging.getLogger('') for handler in list(self.logger.handlers): self.logger.removeHandler(handler) threshold = logging.ERROR - (verbose * 10) self.logger.setLevel(max(threshold, 1)) self.stream_proxy = StreamProxy(self) self.stream_proxy.write_text.connect(self.write) self.stream_proxy.flush_text.connect(self.flush) handler = logging.StreamHandler(self.stream_proxy) handler.setFormatter( logging.Formatter( '%(asctime)s: %(levelname)s: %(name)s: %(message)s', datefmt='%H:%M:%S')) handler.addFilter(LoggerFilter(threshold)) self.logger.addHandler(handler) # intercept stdout and stderr, if they exist if sys.stderr: sys.stderr = OutputInterceptor('stderr', sys.stderr) if sys.stdout: sys.stdout = OutputInterceptor('stdout', sys.stdout)