python - RuntimeError:线程 'Thread-7' 中没有当前事件循环。使用不和谐.py
问题描述
我正在尝试使用线程和异步启动一个 Tkinter GUI 并同时运行一个不和谐的机器人。我的代码如下:
def screen():
global msg_entry, channel_entry
main_window = tk.Tk()
main_window.geometry('720x540+50+50')
main_window.title('Control')
main_window.configure(bg=col1)
main_window.resizable(0,0)
msg_box = tk.Entry()
msg_entry = tk.Entry(main_window, font = 'Helvetica 20',
width = 10, bg = col4, fg = 'white')
msg_entry.place(x=100, y=240)
channel_entry = tk.Entry(main_window, font = 'Helvetica 20',
width = 10, bg = col4, fg = 'white')
channel_entry.place(x=350, y=240)
submit = HoverButton(main_window, bd=0, highlightthickness=0, font = 'Helvetica 25 bold', text = "Send",
width = 7, height = 1, bg = col4, fg = col2, justify = 'left'
,command = lambda: asyncio.get_event_loop().run_until_complete(send()), activebackground = col5)
submit.place(x= 220, y = 320)
main_window.mainloop()
# 614001879831150605
async def send():
ce = channel_entry.get()
channel = client.get_channel(int(ce))
await channel.send(msg_entry)
def func1():
client.loop.create_task(update_meme())
client.run(token)
if __name__ == '__main__':
Thread(target = func1).start()
Thread(target = screen).start()
运行代码时出现以下错误:
RuntimeError: There is no current event loop in thread 'Thread-7'.
我是线程和 asyncio 的新手,因此感谢您提供任何帮助。
解决方案
好吧,您看到您还没有定义一个事件循环来在其中创建任务。所以在你的 func1 中这样做:
def func1():
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
client = commands.Bot(command_prefix='!')
@client.command()
async def send():
ce = channel_entry.get()
channel = client.get_channel(int(ce))
await channel.send(msg_entry)
loop.run_until_complete(client.run('token'))
然后在它下面定义你的命令。也不要忘记加入你的线程(我将它们作为变量(1&2)只是为了演示) thread1.join() thread2.join()
推荐阅读
- c# - ArgumentOutOfRangeException:索引和长度必须引用字符串中的位置
- django-rest-framework - 为什么 DRF browsableapi 不显示创建序列化程序表单
- node.js - 在Node js中将csv转换为json
- c++ - 如何从 qtreeview 给模型两个可点击的图标
- python - Laravel:命令“python失败。退出代码:1(一般错误)'python'不被识别为内部或外部命令,可操作
- c++ - 在替换字符串中的单个字符时修改哈希值(c ++)
- julia - Julia Flux error: MethodError: no method matching *(::Chain{Tuple{Conv{2,4,typeof(identity),Array{Float32,4},Array{Float32,1}},var"#13#15"}}, ::Int64)
- jpa - 认证失败时,根据用户名是否存在发送不同的应答
- python - 为什么 mypy 确定参数是可选的?
- python - 对 pandas 系列“any”、“max”、“sum”与 python 内置函数的性能好奇