我正在为python中的简单聊天客户端编写代码。我有GUI,一个用于存储字符串和其他数据的php服务器。我想让我的代码能够每1秒更新一次聊天(对话文本字段)。 我发布了一些伪代码:
Initialize Gui
Setup Users
UserX write messageX
messageX sent to server
此时,如果userX(可能是user1或user2)有要显示的新消息,我需要检查每秒的内容。 如果我提出类似的东西:
while True:
time.sleep(1)
checkAndDisplayNewMessages()
GUI没有出现!因为在代码的最后我得到了mainloop()
要恢复,我希望我的代码能够让用户异步发送和接收消息!如果用户键入任何消息,则使用部分代码发送消息,而另一部分则在程序运行时不断检查新消息。
答案 0 :(得分:0)
您没有提到您正在使用的GUI工具包;来自mainloop()
我想这是Tk。
The answer to this question explains how to set up a recurring event.不需要多线程。
答案 1 :(得分:0)
您需要分离从应用程序主线程获取新消息的方式。这可以通过Python中的threads轻松完成,它看起来像这样:
import threading
def fetch_messages(ui):
while not ui.ready():
#this loop syncs this process with the UI.
#we don't want to start showing messages
#until the UI is not ready
time.sleep(1)
while True:
time.sleep(1)
checkAndDisplayNewMessages()
def mainlogic():
thread_messages = threading.Thread(target=fetch_messages,args=(some_ui,))
thread_messages.start()
some_ui.show() # here you can go ahead with your UI stuff
# while messages are fetched. This method should
# set the UI to ready.
此实现将并行运行以寻找更多消息,并且还将启动UI。 UI必须与流程同步以寻找消息,否则您最终会遇到有趣的异常。这是通过fetch_messages
函数中的第一个循环实现的。