循环之神再次出击如何在GUI mainloop的情况下保持套接字连接?

2024-10-03 04:26:36 发布

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

问题

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

背景

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

我当前的mainloop函数如下所示(s是套接字对象):

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

这显然是保持服务器运行所必需的(我认为),但问题是,这个循环出现在我的mainloop之前,因此我对此有问题。如果我换一种方式,服务器就永远不会打开。在

完整代码

我的服务器代码是here,我的客户机是here。在

谢谢!在


Tags: 对象函数代码用户服务器脚本heretkinter
3条回答

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

更换

mainloop(s)

^{pr2}$

那你就可以打电话了根.mainloop()像你一样管理Tkinter。在


更新

根据A.Rodas下面的注释,最好使用与python3兼容的更新的threading模块。在

所以你可以替换

mainloop(s)

threading.Thread(target=mainloop, args=(s,)).start()

您可能需要使用Twistedhttp://twistedmatrix.com/trac/

它将Tk-loop集成到它的reactor-loop(它负责网络)http://twistedmatrix.com/documents/8.2.0/api/twisted.internet.tksupport.html,您可以轻松地构建协议。。。。在

在不同的线程中运行它们。有关详细信息,请参阅threading module documentation。在

相关问题 更多 >