Python RuntimeError:主线程不在调用Tkinter的Flask的主循环中

Python RuntimeError:主线程不在调用Tkinter的Flask的主循环中,python,flask,tkinter,facebook-messenger-bot,messenger,Python,Flask,Tkinter,Facebook Messenger Bot,Messenger,我正在安装一个Facebook messenger机器人,它可以在我的笔记本电脑上远程执行代码(即截图、显示消息)。当我从messenger发送消息“msg hello”时,bot将使用Tkinter显示一个带有“hello”的消息框 程序返回错误: RuntimeError: main thread is not in main loop 我试着用以下方法运行Tkinter: root = tkinter.Tk() root.mainloop() 但是程序只是停留在那里不动(就像而True

我正在安装一个Facebook messenger机器人,它可以在我的笔记本电脑上远程执行代码(即截图、显示消息)。当我从messenger发送消息“msg hello”时,bot将使用Tkinter显示一个带有“hello”的消息框

程序返回错误:

RuntimeError: main thread is not in main loop
我试着用以下方法运行Tkinter:

root = tkinter.Tk()
root.mainloop()
但是程序只是停留在那里不动(就像
而True
循环)

以下是我的主烧瓶应用程序的代码:

从烧瓶导入烧瓶,请求
从pymessenger.bot导入bot
从functions.message\u框导入msg\u框
app=烧瓶(名称)
ACCESS_TOKEN='my TOKEN'#我故意删除了这些令牌
验证\u令牌='我的令牌'
bot=bot(访问令牌)
@app.route(“/”,方法=['GET','POST'])
def接收_消息():
如果request.method==“GET”:
#假设请求来自facebook的验证
token\u sent=request.args.get(“hub.verify\u token”)
返回验证令牌(令牌已发送)
其他:
#获取用户向bot发送的任何消息
output=request.get_json()
对于输出['entry']中的事件:
消息=事件['messaging']
对于消息传递中的消息:
如果message.get('message'):
#用户的Facebook Messenger ID,以便我们知道将响应发送回何处
收件人id=邮件['sender']['id']
#从消息中获取代码
text=message['message'].get('text')
代码=文本[:text.find(“”)]#查找消息中的第一个单词
如果代码=='msg':
msg=text[text.find(“”)+1:][获取除代码之外的消息
味精盒(味精)
发送消息(收件人id,f'Sent:{msg})
返回“消息已处理”
def验证令牌(令牌已发送):
如果令牌\u已发送==验证\u令牌:
return request.args.get(“hub.challenge”)
返回“无效验证令牌”
#使用PyMessenger向用户发送响应
def发送消息(收件人id,响应):
#向用户发送通过输入响应参数提供的文本消息
bot.发送文本消息(收件人id,响应)
返回“成功”
如果名称=“\uuuuu main\uuuuuuuu”:
app.run()
这是我在message_box.py中的代码(用于在窗口上显示消息框):

“”
用途:在屏幕上显示消息框
'''
进口tkinter
从tkinter导入消息框
#隐藏主窗口
root=tkinter.Tk()
#root.mainloop()
root.draw()
def味精盒(味精):
messagebox.showinfo(“信息”,msg)
返回1
我收到的完整错误:

 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
[2019-09-05 15:52:47,663] ERROR in app: Exception on / [POST]
Traceback (most recent call last):
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "app.py", line 59, in receive_message
    msg_box(msg)
  File "C:\Users\kevin\Desktop\python\laptopRemoteController\functions\message_box.py", line 13, in msg_box
    messagebox.showinfo("Information", msg)
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\tkinter\messagebox.py", line 83, in showinfo
    return _show(title, message, INFO, OK, **options)
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\tkinter\messagebox.py", line 72, in _show
    res = Message(**options).show()
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\tkinter\commondialog.py", line 39, in show
    w = Frame(self.master)
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 2744, in __init__
    Widget.__init__(self, master, 'frame', cnf, {}, extra)
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 2299, in __init__
    (widgetName, self._w) + extra + self._options(cnf))
RuntimeError: main thread is not in main loop
127.0.0.1 - - [05/Sep/2019 15:52:47] "POST / HTTP/1.1" 500 -
[2019-09-05 15:52:49,220] ERROR in app: Exception on / [POST]
Traceback (most recent call last):
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\kevin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\_compat.py", line 39, in reraise
如果有错误,请帮我改正。此外,如果有其他方法,请告诉我如何


谢谢您的时间和耐心。

您从烧瓶中运行tkinter不会有太多运气
mainloop
实际上就像
while True
循环——它在处理事件时阻塞。此外,它创建的任何窗口都将显示在本地计算机上,而不是web浏览器中。因此,如果弹出一个对话框,该代码也会被阻塞,直到您将其关闭。@BryanOakley,那么如果我从烧瓶中执行另一个包含Tkinter代码的python文件,那么它可能是两个不同的程序同时运行?在tkinter.py被解除后,程序将自行退出,而Flask程序将保持正常运行?从Flask运行tkinter不会有太多运气
mainloop
实际上就像
while True
循环——它在处理事件时阻塞。此外,它创建的任何窗口都将显示在本地计算机上,而不是web浏览器中。因此,如果弹出一个对话框,该代码也会被阻塞,直到您将其关闭。@BryanOakley,那么如果我从烧瓶中执行另一个包含Tkinter代码的python文件,那么它可能是两个不同的程序同时运行?tkinter.py退出后,程序将自动退出,Flask程序将保持运行,对吗?