3

问题

如何mainloop在同一个脚本中同时运行 Tkinter 和无限服务器循环?

背景

我正在 Tkinter ( Python 2.7.3 ) 中创建一个 GUI 服务器。到目前为止,GUI 工作正常,服务器工作正常,我在集成两者时遇到问题。据我所知(如果我错了,请纠正我)服务器需要在无限循环上运行才能接受新用户。遗憾的是,GUI 还需要一个无限循环。我想知道如何让两个循环同时运行。

我当前的 mainloop 函数看起来像这样(s是套接字对象):

def mainloop(s):
    while True:
        channel, addr = s.accept()
        print "Connected with", addr

这显然是保持服务器运行所必需的(我认为)。但问题是,这个循环出现在我之前mainloop,因此我遇到了问题。如果我反过来做,服务器永远不会打开。

完整代码

我的服务器代码在这里,我的客户端在这里

谢谢!

4

3 回答 3

4

使用线程模块在新线程中打开您的服务器主循环。

代替

mainloop(s)

thread.start_new_thread(mainloop, (s,))

然后你可以调用 root.mainloop() 来运行 Tkinter,就像你做的那样。


更新

根据 A. Rodas 在下面的评论,最好使用threading与 Python 3 兼容的较新模块。

所以你可以更换

mainloop(s)

threading.Thread(target=mainloop, args=(s,)).start()
于 2013-04-02T02:28:58.000 回答
3

您可能想使用 Twisted http://twistedmatrix.com/trac/

它将 Tk 循环集成到其反应器循环中(负责联网)http://twistedmatrix.com/documents/8.2.0/api/twisted.internet.tksupport.html,您可以轻松构建协议....

于 2013-04-02T04:17:22.757 回答
0

在单独的线程中运行它们。有关更多信息,请参阅线程模块文档

于 2013-04-02T02:33:31.457 回答