Python 如何在pyqt5中的textedit上更新来自服务器的文本?

Python 如何在pyqt5中的textedit上更新来自服务器的文本?,python,multithreading,pyqt5,Python,Multithreading,Pyqt5,我正在创建一个聊天应用程序,其中我使用一个线程、两个运行应用程序和另一个运行服务器。但是,每当我在服务器上收到消息时,我无法更新textedit上的文本。我试过几种方法,但都不管用。知道如何更新我的文本编辑吗。 这是我的聊天页面窗口的代码- class ChatPage(object): def __init__(self,MainWindow): MainWindow.setObjectName("MainWindow")

我正在创建一个聊天应用程序,其中我使用一个线程、两个运行应用程序和另一个运行服务器。但是,每当我在服务器上收到消息时,我无法更新textedit上的文本。我试过几种方法,但都不管用。知道如何更新我的文本编辑吗。 这是我的聊天页面窗口的代码-

class ChatPage(object):
    def __init__(self,MainWindow):        
        MainWindow.setObjectName("MainWindow")
        self.window2 = MainWindow
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(10, 430, 780, 121))
        self.groupBox.setTitle("")
        self.groupBox.setObjectName("groupBox")
        self.textEdit = QtWidgets.QTextEdit(self.groupBox)
        self.textEdit.setGeometry(QtCore.QRect(10, 50, 651, 60))
        font = QtGui.QFont()
        font.setPointSize(25)
        self.textEdit.setFont(font)
        self.textEdit.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.IBeamCursor))
        self.textEdit.setStyleSheet("background-color: normal;")
        self.textEdit.setFrameShadow(QtWidgets.QFrame.Raised)
        self.textEdit.setObjectName("textEdit")
        self.send = QtWidgets.QPushButton(self.groupBox)
        self.send.setGeometry(QtCore.QRect(670, 50, 101, 61))
        font = QtGui.QFont()
        font.setPointSize(60)
        self.send.setFont(font)
        self.send.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.send.setStyleSheet("background-color: orange;\n"
"")
        self.send.setObjectName("send")
        self.bold = QtWidgets.QPushButton(self.groupBox)
        self.bold.setGeometry(QtCore.QRect(10, 10, 60, 30))
        font = QtGui.QFont()
        font.setPointSize(15)
        font.setBold(True)
        font.setWeight(75)
        self.bold.setFont(font)
        self.bold.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.bold.setCheckable(True)
        self.bold.setObjectName("bold")
        self.italic = QtWidgets.QPushButton(self.groupBox)
        self.italic.setGeometry(QtCore.QRect(80, 10, 60, 30))
        font = QtGui.QFont()
        font.setPointSize(15)
        font.setItalic(True)
        self.italic.setFont(font)
        self.italic.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.italic.setCheckable(True)
        self.italic.setObjectName("italic")
        self.underline = QtWidgets.QPushButton(self.groupBox)
        self.underline.setGeometry(QtCore.QRect(150, 10, 60, 30))
        font = QtGui.QFont()
        font.setPointSize(15)
        font.setUnderline(True)
        self.underline.setFont(font)
        self.underline.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.underline.setCheckable(True)
        self.underline.setObjectName("underline")
        self.strikeout = QtWidgets.QPushButton(self.groupBox)
        self.strikeout.setGeometry(QtCore.QRect(220, 10, 60, 30))
        font = QtGui.QFont()
        font.setPointSize(15)
        font.setStrikeOut(True)
        self.strikeout.setFont(font)
        self.strikeout.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.strikeout.setCheckable(True)
        self.strikeout.setObjectName("strikeout")
        self.clear = QtWidgets.QPushButton(self.groupBox)
        self.clear.setGeometry(QtCore.QRect(290, 10, 60, 30))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.clear.setFont(font)
        self.clear.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.clear.setObjectName("strikeout")
        self.emoji = QtWidgets.QPushButton(self.groupBox)
        self.emoji.setGeometry(QtCore.QRect(720, 10, 50, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)
        self.emoji.setFont(font)
        self.emoji.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.emoji.setObjectName("emoji")
        self.rm = QtWidgets.QPushButton(self.groupBox)
        self.rm.setGeometry(QtCore.QRect(360, 10, 60, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)
        self.rm.setFont(font)
        self.rm.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.rm.setObjectName("rm")
        self.textEdit2 = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit2.setGeometry(QtCore.QRect(10, 59, 780, 361))
        font = QtGui.QFont()
        font.setPointSize(28)
        self.textEdit2.setFont(font)
        self.textEdit2.setStyleSheet("background-color: transparent;")
        self.textEdit2.setFrameShadow(QtWidgets.QFrame.Plain)
        self.textEdit2.setReadOnly(True)
        self.textEdit2.setObjectName("textEdit2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 0, 790, 61))
        font = QtGui.QFont()
        font.setPointSize(36)
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        self.menuBack = QtWidgets.QMenu(self.menubar)
        self.menuBack.setObjectName("menuBack")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionHome = QtWidgets.QAction(MainWindow)
        self.actionHome.setObjectName("actionHome")
        self.actionHelp = QtWidgets.QAction(MainWindow)
        self.actionHelp.setObjectName("actionHelp")
        self.actionShortcut = QtWidgets.QAction(MainWindow)
        self.actionShortcut.setObjectName("actionShortcut")
        self.menuBack.addAction(self.actionHome)
        self.menuBack.addAction(self.actionShortcut)
        self.menubar.addAction(self.menuBack.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "ChatPage"))
        self.textEdit.setPlaceholderText(_translate("MainWindow", "Type Here..."))
        self.send.setStatusTip(_translate("MainWindow", "Send.."))
        self.send.setText(_translate("MainWindow", "▶"))
        self.bold.setStatusTip(_translate("MainWindow", "Bold..."))
        self.bold.setText(_translate("MainWindow", "B"))
        self.bold.setShortcut(_translate("MainWindow", "Ctrl+B"))
        self.italic.setStatusTip(_translate("MainWindow", "Italic..."))
        self.italic.setText(_translate("MainWindow", "I"))
        self.italic.setShortcut(_translate("MainWindow", "Ctrl+I"))
        self.underline.setStatusTip(_translate("MainWindow", "Underlined..."))
        self.underline.setText(_translate("MainWindow", "U"))
        self.underline.setShortcut(_translate("MainWindow", "Ctrl+U"))
        self.strikeout.setStatusTip(_translate("MainWindow", "Strikeout..."))
        self.strikeout.setText(_translate("MainWindow", "abc"))
        self.rm.setText(_translate("MainWindow", "Receive"))
        self.clear.setText(_translate("MainWindow", "Clear"))
        self.strikeout.setShortcut(_translate("MainWindow", "Ctrl+T"))
        self.emoji.setStatusTip(_translate("MainWindow", "Emoji..."))
        self.emoji.setText(_translate("MainWindow", "Usually, the server is started in another process than the GUI, not just another thread. But if it was you want, it is fine. it has nothing to do with your problem.

You already send the message to the server thread : the
self.send.clicked.connect(self.send_message)
will make the function
send_message
be called each time the Send button is clicked.
Exactly the same applies for displaying the message in the
textEdit
: connect the click to a new function that add the message content to the textEdit.

PyQt slot magic :

self.send.clicked.connect(self.send_message)
类聊天页(对象):
定义初始化(自,主窗口):
MainWindow.setObjectName(“MainWindow”)
self.window2=主窗口
主窗口。调整大小(800600)
self.centralwidget=qtwidts.QWidget(主窗口)
self.centralwidget.setObjectName(“centralwidget”)
self.groupBox=qtwidts.QGroupBox(self.centralwidget)
self.groupBox.setGeometry(QtCore.QRect(10430780121))
self.groupBox.setTitle(“”)
self.groupBox.setObjectName(“groupBox”)
self.textEdit=qtwidts.QTextEdit(self.groupBox)
self.textEdit.setGeometry(QtCore.QRect(10,50651,60))
font=QtGui.QFont()
font.setPointSize(25)
self.textEdit.setFont(字体)
self.textEdit.viewport().setProperty(“游标”,QtGui.QCursor(QtCore.Qt.IBeamCursor))
self.textEdit.setStyleSheet(“背景色:normal;”)
self.textEdit.setFrameShadow(qtwidts.QFrame.Raised)
self.textEdit.setObjectName(“textEdit”)
self.send=qtwidts.QPushButton(self.groupBox)
self.send.setGeometry(QtCore.QRect(670,50,101,61))
font=QtGui.QFont()
字体设置点大小(60)
self.send.setFont(字体)
self.send.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.send.setStyleSheet(“背景色:橙色;\n”
"")
self.send.setObjectName(“发送”)
self.bold=qtwidts.QPushButton(self.groupBox)
self.bold.setGeometry(QtCore.QRect(10,10,60,30))
font=QtGui.QFont()
字体设置点大小(15)
font.setBold(真)
字体设置重量(75)
self.bold.setFont(字体)
self.bold.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.bold.setCheckable(真)
self.bold.setObjectName(“粗体”)
self.italic=qtwidts.QPushButton(self.groupBox)
self.italic.setGeometry(QtCore.QRect(80,10,60,30))
font=QtGui.QFont()
字体设置点大小(15)
font.setItalic(真)
self.italic.setFont(字体)
self.italic.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.italic.setCheckable(真)
self.italic.setObjectName(“italic”)
self.underline=qtwidts.QPushButton(self.groupBox)
self.underline.setGeometry(QtCore.QRect(150,10,60,30))
font=QtGui.QFont()
字体设置点大小(15)
font.setUnderline(True)
self.underline.setFont(字体)
self.underline.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.underline.setCheckable(True)
self.underline.setObjectName(“underline”)
self.strikeout=qtwidts.QPushButton(self.groupBox)
自删除集合几何(QtCore.QRect(220,10,60,30))
font=QtGui.QFont()
字体设置点大小(15)
font.setTrikeout(真)
self.strikeout.setFont(字体)
self.trikeout.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
自我删除。可设置检查(真)
self.strikeout.setObjectName(“strikeout”)
self.clear=qtwidts.QPushButton(self.groupBox)
自清除设置几何体(QtCore.QRect(290,10,60,30))
font=QtGui.QFont()
字体设置点大小(15)
self.clear.setFont(字体)
self.clear.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.clear.setObjectName(“删除线”)
self.emoji=qtwidts.QPushButton(self.groupBox)
self.emoji.setGeometry(QtCore.QRect(720,10,50,31))
font=QtGui.QFont()
字体设置点大小(12)
font.setBold(False)
字体设置重量(50)
self.emoji.setFont(字体)
self.emoji.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.emoji.setObjectName(“emoji”)
self.rm=qtwidts.QPushButton(self.groupBox)
self.rm.setGeometry(QtCore.QRect(360,10,60,31))
font=QtGui.QFont()
字体设置点大小(12)
font.setBold(False)
字体设置重量(50)
self.rm.setFont(字体)
self.rm.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.rm.setObjectName(“rm”)
self.textededit2=QtWidgets.QTextEdit(self.centralwidget)
self.textEdit2.setGeometry(QtCore.QRect(10,59780361))
font=QtGui.QFont()
字体设置点大小(28)
self.textEdit2.setFont(字体)
self.textEdit2.setStyleSheet(“背景色:透明;”)
self.textEdit2.setFrameShadow(qtwidts.QFrame.Plain)
self.textEdit2.setReadOnly(True)
self.textEdit2.setObjectName(“textEdit2”)
self.label=qtwidts.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10,0,790,61))
font=QtGui.QFont()
font.setPointSize(36)
font.setBold(真)
字体设置重量(75)
self.label.setFont(字体)
self.label.setObjectName(“标签”)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar=qtwidts.QMenuBar(主窗口)
self.menubar.setGeometry(QtCore.QRect(0,0800,21))
self.menubar.setObjectName(“menubar”)
self.menuBack=qtwidts.QMenu(self.menubar)
self.menuBack.setObjectName(“menuBack”)
MainWindow.setMenuBar(self.menubar)
self.statusbar=qtwidts.QStatusBar(主窗口)
self.statusbar.setObjectName(“statusbar”)
main window.setStatusBar(self.statusbar)
self.actionHome=QtWidgets.QAction(主窗口)
self.actionHome.setObjectName(“actionHome”)
self.actionHelp=QtWidgets.QAction(主窗口)
自助。