首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RuntimeError:线程'Thread-7‘中没有当前事件循环。用discord.py

RuntimeError:线程'Thread-7‘中没有当前事件循环。用discord.py
EN

Stack Overflow用户
提问于 2020-04-12 03:58:31
回答 1查看 177关注 0票数 3

我正在尝试打开一个Tkinter,同时运行一个与线程和异步不协调的机器人。我的代码如下:

代码语言:javascript
复制
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'.

我对线程和异步很陌生,所以任何帮助都很感激。

EN

回答 1

Stack Overflow用户

发布于 2022-02-03 16:42:16

您可以看到,您还没有定义一个事件循环来在其中创建一个任务。所以在您的func1中这样做:

代码语言:javascript
复制
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),只是为了演示)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61166674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档