我正在尝试使用 PyQt5 为 AI 助手制作一个简单的图形用户界面。到目前为止,我能够将标准输出重定向到 QPlainTextEdit 而不是终端。但是当主程序要求输入时(如图)我无法捕获它。()
techna.py
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtGui import QMovie, QTextBlock
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from gui.technaui2 import Ui_technaui2
import sys
import techna2
class MainThread(QThread):
def __init__(self):
super(MainThread, self).__init__()
def run(self):
self.TaskGui()
def TaskGui(self):
while True:
techna2.Main()
startFunction = MainThread()
class GuiStart(QMainWindow):
def __init__(self):
super().__init__()
self.technaui2 = Ui_technaui2()
self.technaui2.setupUi(self)
self.technaui2.pushButton.clicked.connect(self.startFunc)
self.technaui2.pushButton_2.clicked.connect(self.close)
sys.stdout = EmittingStream(textWritten=self.normalOutputWritten)
def __del__(self):
# Restore sys.stdout
sys.stdout = sys.__stdout__
def normalOutputWritten(self, text):
"""Append text to the QTextEdit."""
cursor = self.technaui2.textEdit.textCursor()
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(text)
self.technaui2.textEdit.setTextCursor(cursor)
self.technaui2.textEdit.ensureCursorVisible()
def startFunc(self):
self.technaui2.movies = QtGui.QMovie(
"C:\\Users\\Hp\\Desktop\\SP\\techna2\\gui\\images\\gif\\ai2.gif"
)
self.technaui2.gif.setMovie(self.technaui2.movies)
self.technaui2.movies.start()
startFunction.start()
class EmittingStream(QtCore.QObject):
textWritten = QtCore.pyqtSignal(str)
def write(self, text):
self.textWritten.emit(str(text))
guiApp = QApplication(sys.argv)
guiTechna = GuiStart()
guiTechna.show()
exit(guiApp.exec_())
technaui2.py
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
import sys
class Ui_technaui2(object):
def setupUi(self, technaui2):
technaui2.setObjectName("technaui2")
technaui2.resize(1000, 800)
self.centralwidget = QtWidgets.QWidget(technaui2)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(-6, -1, 651, 411))
self.label.setText("")
self.label.setPixmap(
QtGui.QPixmap(
"C:\\Users\\Hp\\Desktop\\SP\\techna2\\gui\\images\\use\\bg.webp"
)
)
self.label.setScaledContents(True)
self.label.setObjectName("label")
self.gif = QtWidgets.QLabel(self.centralwidget)
self.gif.setGeometry(QtCore.QRect(147, 0, 321, 261))
self.gif.setStyleSheet("border : 1px solid purple;")
self.gif.setText("")
self.gif.setPixmap(
QtGui.QPixmap(
"C:\\Users\\Hp\\Desktop\\SP\\techna2\\gui\\images\\gif\\ai2.gif"
)
)
self.gif.setScaledContents(True)
self.gif.setObjectName("gif")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(675, 330, 111, 51))
self.pushButton.setStyleSheet(
'font: 16pt "Modern No. 20";\n'
"background-color: rgb(0, 0, 0);\n"
"color: rgb(255, 255, 255);\n"
"color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 61, 162, 255), stop:1 rgba(255, 255, 255, 255));\n"
"border : 1px solid;\n"
"border-color: rgb(170, 85, 255);"
)
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(675, 400, 111, 51))
self.pushButton_2.setStyleSheet(
'font: 16pt "Modern No. 20";\n'
"\n"
"background-color: rgb(0, 0, 0);\n"
"color: rgb(255, 255, 255);\n"
"color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 61, 162, 255), stop:1 rgba(255, 255, 255, 255));\n"
"border : 1px solid;\n"
"border-color: rgb(170, 0, 255);"
)
self.pushButton_2.setObjectName("pushButton_2")
self.textEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(0, 500, 651, 211))
self.textEdit.setObjectName("textEdit")
technaui2.setCentralWidget(self.centralwidget)
self.textEdit.setStyleSheet(
'font: 12pt "Modern No. 10";\n'
"background-color: rgb(0, 0, 0);\n"
"color: rgb(255, 255, 255);\n"
"padding-left: 30px;\n"
)
self.label.resize(1006, 800)
self.gif.resize(700, 500)
self.pushButton.resize(140, 70)
self.pushButton_2.resize(140, 70)
self.textEdit.resize(1000, 300)
self.retranslateUi(technaui2)
QtCore.QMetaObject.connectSlotsByName(technaui2)
def retranslateUi(self, technaui2):
_translate = QtCore.QCoreApplication.translate
technaui2.setWindowTitle(_translate("technaui2", "TECHnA"))
technaui2.setWindowIcon(
QtGui.QIcon(
"C:\\Users\\Hp\\Desktop\\SP\\techna2\\gui\\images\\Difference-between-AI-and-Neural-Network-768x614.jpg"
)
)
self.pushButton.setText(_translate("technaui2", "START"))
self.pushButton_2.setText(_translate("technaui2", "STOP"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
technaui2 = QtWidgets.QMainWindow()
ui = Ui_technaui2()
ui.setupUi(technaui2)
technaui2.show()
sys.exit(app.exec_())
如何捕获用户的输入并将其返回给正在运行的程序?