コンソールとQTextBrowser
ウィジェットの両方にstdoutを送信しようとしています。しかし、私は無限ループのいくつかの種類を取得しているし、アプリケーション終了します。ここでstdoutをリダイレクトしようとすると無限ループが発生する
は私のコードです:
import sys
from PyQt5 import QtWidgets, uic
from PyQt5.QtCore import *
qtCreatorFile = "qt_ui.ui"
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
self.start_button.clicked.connect(printing)
def printing():
print("Pressed!\n")
class Logger(QObject):
def __init__(self):
super().__init__()
self.terminal = sys.stdout
def write(self, message):
self.terminal.write(message)
self.log_browser.setText(message) #problem is in this line
def flush(self):
pass
if __name__ == "__main__":
sys.stdout = Logger()
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
その結果、ときクリックSTART_BUTTON、以下が観察される:
:"C:\...\python.exe" "E:/.../qt_gui.py"
Pressed!
Pressed!
Pressed!
... (totaly 332 times)
Pressed!
Pressed!
Pressed!
Process finished with exit code 1
この行はループを作る、なぜ私は理解できません
self.log_browser.setText(message)
1番目の回答後に編集:
上記の行をprint(message)
に置き換えましたが、同じ結果が得られました。助けていただければ幸いです。
クラスdefintion –
下にインデントエラーはそれがない元のコードから、コピー/貼り付けエラーだっあります。私はそれを修正しました。 – dandepeched