Работа в QGIS 3.2 / Python 3.6 / Win 10.
Я пишу плагин, и я хочу, чтобы мои stderr и stdout отображались в «logger», который является QTextBrowser, который можно найти напоследняя вкладка QTabWidget.
Я просмотрел эти форумы, чтобы узнать, как и нашел рабочее решение.Однако это работает только когда я запускаю / отлаживаю свой код в PyCharm.Но когда я открываю свой плагин в QGIS, стандартный вывод возвращается к консоли Python QGIS, а стандартный вывод обратно к QgsMessageBar.
Понятия не имею почему.Настройки как-то отменены?В редких случаях это работает, один или два раза.И затем он возвращается к консоли / QgsMessageBar.Поэтому я думаю, что это может быть порядок действий?
Соответствующая часть моего кода:
class EmittingStream:
def __init__(self, tab_widget): # tab_widget is a QTabWidget
self.tab_widget = tab_widget
self.log_index = tab_widget.indexOf(tab_widget.findChild(QWidget, 'tab_log'))
self.log_widget = tab_widget.findChild(QWidget, 'logBrowser')
def write(self, text):
self.log_widget.append(text)
self.tab_widget.setCurrentIndex(self.log_index)
class MyWidget(QDialog):
def __init__(self):
super(MyWidget, self).__init__()
loadUi(os.path.join(os.path.dirname(__file__), 'my_widget.ui'), self)
sys.stdout = EmittingStream(self.tabWidget)
sys.stderr = EmittingStream(self.tabWidget)
....
def __del__(self):
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__