我的目标是制造一个不和谐的机器人,当使用命令时,它会接受您所说的内容,并将其显示在一个小的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