问题
如何在同一个脚本中同时运行Tkinter mainloop
和无限服务器循环?
背景
我正在使用Tkinter(Python 2.7.3)创建GUI服务器。到目前为止,GUI工作正常,服务器正常工作,但我遇到了集成两者的问题。据我所知(如果我错了,请纠正我)服务器需要在无限循环上运行才能接受新用户。遗憾的是,GUI还需要一个无限循环。我想知道如何让两个循环同时运行。
我当前的mainloop函数看起来像这样(s
是套接字对象):
def mainloop(s):
while True:
channel, addr = s.accept()
print "Connected with", addr
显然需要保持服务器运行(我想。)但问题是,这个循环出现在mainloop
之前,因此我遇到了问题。如果我反过来这样做,服务器永远不会打开。
完整代码
谢谢!
答案 0 :(得分:4)
使用线程模块在新线程中打开服务器mainloop。
替换
mainloop(s)
与
thread.start_new_thread(mainloop, (s,))
然后你可以调用root.mainloop()来运行Tkinter,就像你一样。
<强>更新强>
Per A. Rodas&#39;在下面发表评论时,我们首选使用与Python 3兼容的较新threading
模块。
所以你可以替换
mainloop(s)
与
threading.Thread(target=mainloop, args=(s,)).start()
答案 1 :(得分:3)
您可能想要使用Twisted http://twistedmatrix.com/trac/
它将Tk循环集成到其反应器循环(进行网络连接)http://twistedmatrix.com/documents/8.2.0/api/twisted.internet.tksupport.html中,您可以轻松构建协议....
答案 2 :(得分:0)
在不同的线程中运行它们。有关详细信息,请参阅threading module documentation。