Плагин QGIS 3.2: сбой stderr и stdout для QTextBrowser в QGIS - PullRequest
0 голосов
/ 25 февраля 2019

Работа в 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__
...