Я бы хотел запустить discord.py, оболочку для API Discord, которая помогает создавать ботов на основе Python.Я хотел бы запустить tkinter, чтобы разрешить некоторый внешний интерфейс для бота (например, кнопки «Пуск» и «Стоп»).
Если я вначале запускаю tkinter, графический интерфейс пользователя блокируется, как только я запускаю бота.Если я сначала запускаю бота, графический интерфейс не запускается.Я не знаю достаточно, чтобы ясно увидеть проблему, но я думаю, что они оба используют блокирующие циклы.Я думаю, что многопоточность и сны - подход, чтобы исправить это.
import discord
import tkinter
bot = discord.Client()
root = tkinter.Tk()
# Methods without arguments to be called from buttons
def start():
with open('token.txt') as f:
TOKEN = f.readline()
bot.run(TOKEN)
def stop():
bot.close()
# This is how discord.py uses messages
@bot.event
async def on_message(message):
if message.content == 'ping':
await message.channel.send('pong')
if __name__ == '__main__':
# Building a GUI
canvas = tkinter.Canvas(root, height=300, width=400, bd=5)
canvas.pack()
frame = tkinter.Frame(root, bd=5)
frame.place(relx=0.05, rely=0.05, relwidth=.9, relheight=.9)
btn_start = tkinter.Button(frame, text="Start", command=start)
btn_start.place(relx=0.25, rely=.4, relheight=.2, relwidth=0.25)
btn_stop = tkinter.Button(frame, text="Stop", command=stop)
btn_stop.place(relx=0.5, rely=.4, relheight=.2, relwidth=0.25)
# Here's the juicy code bits that we've come for:
root.mainloop()