使用Tkinter和Tornado Websockets。我如何才能同时运行?

时间:2015-01-23 18:23:39

标签: python multithreading python-2.7 tkinter tornado

我想创建一个简单的python应用程序,它在TKinter窗口中显示它从Websocket接收的内容。

我的问题是,我不能让两者并排运行。对于通信,我会使用一个队列,但我之前坚持了一步。

我的计划是在一个额外的线程中运行龙卷风循环,但不幸的是它不起作用。我搜索解决方案,但我没有找到任何有用的东西。

继承我的测试应用程序:

import threading
import tornado.ioloop
import tornado.web
import tornado.websocket
import Tkinter

class TornadoThread (threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        application = tornado.web.Application([(r'/',WSHandler)])
        application.listen(9090)
    def run(self):
        print "Start a tornado"
        tornado.ioloop.IOLoop.instance().start()

class WSHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        print 'connection opened...'
        self.write_message("The server says: 'Hello'. Connection was accepted.")

    def on_message(self, message):
        #self.write_message("The server says: " + message + " back at you")
        print 'received:', message

    def on_close(self):
        print 'connection closed...'



TornadoThread = TornadoThread()

# Start new Threads
TornadoThread.start()

top = Tkinter.Tk()
top.mainloop()

`

1 个答案:

答案 0 :(得分:1)

您在IOLoop.instance().start()的调用中缺少括号。通过修复(以及一些其他更改,修复run方法的缩进并将myThread()更改为TornadoThread()),您的代码适合我。