我有一個設定為 True 的 while 回圈,在回圈內我想向 TextBrowser 寫入一些文本,但無論我嘗試什么,self.textEdit.setText 或 self.textEdit.append 都不起作用。我也嘗試更改標簽甚至行文本,但沒有成功。當我把它從while回圈中取出時,文本出現在文本瀏覽器中。我使用執行緒,但即使啟動執行緒,文本也不會出現在文本瀏覽器中。這是我的代碼。
import socket
import socket as socket_library
import threading
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1014, 920)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.radioButton = QtWidgets.QRadioButton(self.centralwidget)
self.radioButton.setGeometry(QtCore.QRect(180, 180, 141, 41))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.radioButton.setFont(font)
self.radioButton.setObjectName("radioButton")
self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(180, 230, 691, 411))
self.textEdit.setStyleSheet("background-color: rgb(0, 0, 0);\n"
"color: rgb(0, 255, 0);")
self.textEdit.setObjectName("textEdit")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(210, 80, 571, 51))
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.radioButton.setText(_translate("MainWindow", "Start Server"))
self.label.setText(_translate("MainWindow",
"<html><head/><body><p><span style=\" color:#00557f;\">Lots of Trips Server</span></p></body></html>"))
self.radioButton.clicked.connect(self.check_readio_button)
def check_readio_button(self):
if self.radioButton.isChecked():
self.activate_server()
def activate_server(self):
hostname = socket.gethostname()
IPaddress = socket.gethostbyname(hostname)
port = 45971
server_socket = socket_library.socket(socket_library.AF_INET, socket_library.SOCK_DGRAM)
server_socket.bind((IPaddress, port))
while True:
try:
message, address = server_socket.recvfrom(1024)
except ConnectionError:
print("Connection with server is closed.")
break
server_socket.sendto("Thank you for connection.".encode("UTF-8"), address)
answer = message.decode("UTF-8")
self.thread1 = threading.Thread(target=self.task(), args=(None,))
self.thread1.start()
self.thread1.join()
server_socket.close()
def task(self):
self.textEdit.setText("This is from another thread")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Thread.start()
Thread.join()
uj5u.com熱心網友回復:
我認為“追加”正在作業,但您需要處理掛起的事件并通過呼叫重繪 GUIQApplication.processEvents()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/532701.html
下一篇:KotlinAndroid中的runOnUiThread和CoroutineScope(Dispatchers.Main)有什么區別嗎
