[英]How to Update the text from server on textedit in pyqt5?
我正在創建一個聊天應用程序,其中我使用一個線程兩個運行應用程序和另一個運行服務器。 但是每當我在服務器上收到消息時,我都無法更新 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", "🙂"))
with open('c1_id.txt','r') as file:
text = file.read()
self.label.setText(_translate("MainWindow", text))
self.menuBack.setTitle(_translate("MainWindow", "Back"))
self.actionHome.setText(_translate("MainWindow", "Home"))
self.actionHome.setShortcut(_translate("MainWindow", "Ctrl+H"))
self.send.setShortcut(_translate("MainWindow", "Ctrl+Return"))
self.actionHelp.setText(_translate("MainWindow", "Help"))
self.actionShortcut.setText(_translate("MainWindow", "Shortcuts"))
# Functionality
self.send.clicked.connect(self.send_message)
self.rm.clicked.connect(self.add_text)
self.clear.clicked.connect(self.clear_text)
self.actionHome.triggered.connect(lambda: self.switch_to_contacts())
def send_message(self):
text = self.textEdit.toPlainText()
if text != '':
textbox = self.textEdit2.toPlainText()
send(text)
self.textEdit.clear()
self.textEdit2.setText(f"{textbox}You: {text}\n")
def add_text(self):
with open('c1_id.txt','r') as file:
text = file.read()
self.textEdit2.setText(self.textEdit2.toPlainText()+text+': '+messages+'\n')
def clear_text(self):
self.textEdit2.clear()
這是運行應用程序和服務器的代碼-
thread1 = threading.Thread(target=Run_App)
thread2 = threading.Thread(target=Run_Server)
thread1.start()
thread2.start()
請查看我發送的任何內容都發送到我的服務器並顯示在終端中,但我希望消息顯示在文本中。 不在終端上。 所以請提出任何方法。 請不要將此答案標記為重復,因為我無法找到任何解決方案,如果您認為答案已經存在,請也將答案發送給我。 請幫助我,我已經為這個答案尋找了幾個星期。 謝謝您的幫助。
通常,服務器在GUI之外的另一個進程中啟動,而不僅僅是另一個線程。 但如果是你想要的,那很好。 它與你的問題無關。
您已經將消息發送到服務器線程: self.send.clicked.connect(self.send_message)
將使 function send_message
在每次單擊“發送”按鈕時被調用。
同樣適用於在textEdit
中顯示消息:將點擊連接到一個新的 function,它將消息內容添加到 textEdit。
PyQt 插槽魔法:
self.send.clicked.connect(self.send_message)
不起作用,但是
self.send.clicked.connect(lambda: self.send_message())
做
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.