【问题标题】:RuntimeError: There is no current event loop in thread 'Thread-7'. With discord.pyRuntimeError:线程 'Thread-7' 中没有当前事件循环。使用不和谐.py
【发布时间】:2020-04-12 03:58:31
【问题描述】:

我正在尝试调出 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'.

我是线程和异步的新手,因此非常感谢任何帮助。

【问题讨论】:

    标签: python multithreading tkinter discord.py


    【解决方案1】:

    嗯,你看你还没有定义一个事件循环来创建一个任务。所以在你的 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)只是为了演示) 线程1.join() thread2.join()

    【讨论】:

      猜你喜欢
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多