龙卷风和 tkinter 在一起
tornado and tkinter together
我是 python 编程新手。请耐心等待。我正在使用 python 3 并且我需要打开一个 websocket 通信并显示一个图形界面。但是,如果我将它们放在相同的代码中,它们将无法工作,因为它们都在循环函数上工作。
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.websocket
from tkinter import *
class ConfigurationHandler(tornado.websocket.WebSocketHandler):
def open(self):
print ("Connection Opened")
self.write_message("connected")
def on_close(self):
print ("Connection Closed")
def on_message(self, message):
print (("Message received: {}").format(message))
self.write_message(message)
def check_origin(self, origin):
return True
try:
application= tornado.web.Application([(r"/",ConfigurationHandler)])
if __name__ == "__main__":
app=tornado.httpserver.HTTPServer(application)
print("waiting")
app.listen(8000)
tornado.ioloop.IOLoop.instance().start()
root=Tk() #I need to see this window
root.mainloop()
except (KeyboardInterrupt,SystemExit):
raise
except:
print("Error")
抱歉我的英语不好,
提前致谢!
感谢@DoNotClick 我解决了我的问题。
解决方案:
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.websocket
from tkinter import *
import threading
class ConfigurationHandler(tornado.websocket.WebSocketHandler):
def open(self):
print ("Connection Opened")
self.write_message("connected")
def on_close(self):
print ("Connection Closed")
def on_message(self, message):
print (("Message received: {}").format(message))
self.write_message(message)
def check_origin(self, origin):
return True
class myThread (threading.Thread):
def __init__(self,name):
threading.Thread.__init__(self)
self.name=name
def run(self):
try:
application= tornado.web.Application([(r"/",ConfigurationHandler)])
if __name__ == "__main__":
app=tornado.httpserver.HTTPServer(application)
print("waiting")
app.listen(8000)
tornado.ioloop.IOLoop.instance().start()
except (KeyboardInterrupt,SystemExit):
raise
except:
print("Error")
on_finish()
root=Tk()
thread1=myThread("Connection")
thread1.start()
root.mainloop()
如果您使用 tornado.ioloop.IOLoop.instance().start()
,将启动一个循环,它将阻塞当前线程,直到调用 tornado.ioloop.IOLoop.instance().stop()
,但这也会停止龙卷风服务器。如果你想执行另一个循环,比如 tkinter mainloop,那么你必须在另一个线程中同时执行 运行 这两个循环。如果您不知道什么主题,只需搜索 python 主题教程
我是 python 编程新手。请耐心等待。我正在使用 python 3 并且我需要打开一个 websocket 通信并显示一个图形界面。但是,如果我将它们放在相同的代码中,它们将无法工作,因为它们都在循环函数上工作。
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.websocket
from tkinter import *
class ConfigurationHandler(tornado.websocket.WebSocketHandler):
def open(self):
print ("Connection Opened")
self.write_message("connected")
def on_close(self):
print ("Connection Closed")
def on_message(self, message):
print (("Message received: {}").format(message))
self.write_message(message)
def check_origin(self, origin):
return True
try:
application= tornado.web.Application([(r"/",ConfigurationHandler)])
if __name__ == "__main__":
app=tornado.httpserver.HTTPServer(application)
print("waiting")
app.listen(8000)
tornado.ioloop.IOLoop.instance().start()
root=Tk() #I need to see this window
root.mainloop()
except (KeyboardInterrupt,SystemExit):
raise
except:
print("Error")
抱歉我的英语不好, 提前致谢!
感谢@DoNotClick 我解决了我的问题。
解决方案:
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.websocket
from tkinter import *
import threading
class ConfigurationHandler(tornado.websocket.WebSocketHandler):
def open(self):
print ("Connection Opened")
self.write_message("connected")
def on_close(self):
print ("Connection Closed")
def on_message(self, message):
print (("Message received: {}").format(message))
self.write_message(message)
def check_origin(self, origin):
return True
class myThread (threading.Thread):
def __init__(self,name):
threading.Thread.__init__(self)
self.name=name
def run(self):
try:
application= tornado.web.Application([(r"/",ConfigurationHandler)])
if __name__ == "__main__":
app=tornado.httpserver.HTTPServer(application)
print("waiting")
app.listen(8000)
tornado.ioloop.IOLoop.instance().start()
except (KeyboardInterrupt,SystemExit):
raise
except:
print("Error")
on_finish()
root=Tk()
thread1=myThread("Connection")
thread1.start()
root.mainloop()
如果您使用 tornado.ioloop.IOLoop.instance().start()
,将启动一个循环,它将阻塞当前线程,直到调用 tornado.ioloop.IOLoop.instance().stop()
,但这也会停止龙卷风服务器。如果你想执行另一个循环,比如 tkinter mainloop,那么你必须在另一个线程中同时执行 运行 这两个循环。如果您不知道什么主题,只需搜索 python 主题教程