在QGIS 3.2 / Python 3.6 / Win 10中工作。
我正在编写一个插件,我希望将stderr和stdout显示在“记录器”中,该记录器是QTextBrowser,可以在QTabWidget的最后一个选项卡中找到。
我浏览了这些论坛以了解操作方法,并找到了可行的解决方案。但是,仅当我在PyCharm中运行/调试代码时,此方法才有效。但是,当我在QGIS中打开插件时,stdout默认返回QGIS python控制台,stderr默认返回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__