使用不一致的机器人事件更新GUI

时间:2020-05-28 17:43:34

标签: python tkinter discord discord.py

我的目标是制造一个不和谐的机器人,当使用命令时,它会接受您所说的内容,并将其显示在一个小的Tkinter GUI上。我设法让它分别运行两个脚本,discord bot和tkinter脚本,它们每X次检查一个文本文件(discord的文本在其中)并更新tkinter标签。 当然这不是很有效,所以我只想使命令在discord上使用时才更新gui。 我已经读过关于线程和多处理的知识,但是它们都给我类似“线程/进程只能启动一次”的错误,或者就是无法按照我需要的方式工作。

这对我来说是一种新事物,不是编程,而是使用线程和进程。这是实现我前面提到的目标的正确方法吗? 这是不和谐机器人的代码:

client = commands.Bot(command_prefix='*')
gui_main = threading.Thread(target=gui.main)


gui_main.start()

@client.event
async def on_ready():
    print('**Listo gfe')




@client.command()
async def showchechu(ctx,*,text):

    print(text)

    f = open("input.txt", "w")
    f.write(text)
    f.close()


    gui_main.start()


    embed = discord.Embed(
        title = str(ctx.message.author.name),
        description = text,
        colour = discord.Colour.blue()
    )

    embed.set_footer(text='Dale unos segundos y le saldrá tu mensaje al chechu')


    await ctx.send(embed=embed)




@client.command()
async def ole(ctx):
    channel = ctx.message.author.channel
    print(channel)
    await channel.connect()



client.run(TOKEN)

这是GUI的代码:

import tkinter as tk

def main():
    root=tk.Tk()
    root.attributes('-fullscreen', True)
    root.wm_attributes("-topmost", 1)

    pad=3
    root.geometry("{0}x{1}+0+0".format(
            root.winfo_screenwidth()-pad, root.winfo_screenheight()-pad))

    def exit(event):
        root.destroy()

    root.bind('<Escape>',exit)

    #root.after(5000, root.destroy)

    set_label(root)

    root.mainloop()

def update_input():
    input_text = ''
    f = open("input.txt", "r")
    input_text = f.read()
    f.close()
    return input_text

def set_label(root):
    svar = tk.StringVar()
    input_text = update_input()

    svar.set(input_text)

    labl = tk.Label(root, bd=8, wraplength=350, textvariable=svar, heigh=5, font=('Helvetica 25 bold'))

    labl.pack()

    print('msg: '+str(input_text))

我正在使用python 3.8

0 个答案:

没有答案