首页 > 解决方案 > 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 的新手,因此感谢您提供任何帮助。

标签: pythonmultithreadingtkinterdiscord.py

解决方案


好吧,您看到您还没有定义一个事件循环来在其中创建任务。所以在你的 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()


推荐阅读