PySide QTextEdit或QPlainTextEdit更新更快?

2024-10-01 00:28:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在尝试使我的PC上的GUI与每个套接字的服务器通信。在

以下是GUI的部分代码:

def listenToServer(self):
    """ keep listening to the server until receiving 'All Contracts Finished' """
    self.feedbackWindow.appendPlainText('--Executing the Contracts, Listening to Server--')
    contentsListend = ''
    while contentsListend != 'All Contracts Finished':
        #keep listen from the socket
        contentsListend = self.skt.recv(1024)
        #make the GUI show the text
        self.feedbackWindow.appendPlainText(contentsListend)

另一方面,服务器将逐个发送数据,但间隔一定。下面是模拟服务器的测试代码:

^{pr2}$

现在,一切正常,除了这个问题之外,GUI只会在服务器中的整个for循环之后显示接收到的消息。 一旦我运行了服务器和GUI。服务器端以正确的速度将消息逐个打印到屏幕上,但是GUI没有响应,它不更新。直到程序结束,所有7行代码都在GUI端同时出现。我希望它们一个接一个地出现,这样以后我就可以在我的电脑上用这个图形用户界面来检查服务器的状态

有谁能帮忙吗,非常感谢!在


Tags: theto代码self服务器消息guiall
1条回答
网友
1楼 · 发布于 2024-10-01 00:28:50

这与“快”或“慢”无关。在

GUI与您的listenToServer方法运行在同一个线程上,因此只要它在运行,GUI线程上就不会发生任何事情。您会注意到,当您等待套接字输入时,您不能在GUI中移动、调整大小或单击任何内容。在

你必须在一个独立于GUI的线程上运行listenToServer方法。正确的方法是实现一个Worker对象,该对象从套接字接收数据,并通过Signal->;Slot连接通知textEdit有数据可以接收。在

不久前我回答了一个类似的问题,这可能会有所帮助 https://stackoverflow.com/a/24821300/2319400

一个真的快速而肮脏的替代方法是,当您添加新数据时,通过以下方式处理所有排队事件:

QApplication.processEvents()

这给了Qt时间,例如在屏幕上用新文本重新绘制GUI。 但是,当python等待来自套接字的数据时,GUI不会响应任何事件!在

相关问题 更多 >