【发布时间】:2019-03-25 02:35:56
【问题描述】:
所以我的问题是,当我使用 discord.py API 时,tkinter 窗口没有出现。但是当我执行 ctrl+c 退出 tkinter 窗口时,它会自动出现,我认为与 client.run(TOKEN) 存在冲突,因为当我取出该行时它可以工作,但是我的应用程序没有做任何事情。
from tkinter import *
from discord.ext.commands import Bot
from discord import Game
TOKEN = ""
BOT_PREFIX = "!"
client = Bot(command_prefix=BOT_PREFIX)
root = Tk()
root.title("NinjaBoT Discord Client")
root.resizable(0, 0)
root.configure(bg="black")
root.geometry("630x520")
labelframe2 = LabelFrame(root)
labelframe2.config(bg="black", padx=5, pady=10)
labelframe2.grid(row=1, column=3)
labelframe3 = LabelFrame(root)
labelframe3.config(bg="black", padx=5, pady=10)
labelframe3.grid(row=1, column=0)
labelframe = LabelFrame(labelframe3)
labelframe.config(bg="black", padx=5, pady=10)
labelframe.grid(row=2, column=0)
label = Label(root, text="NinjaBoT Discord")
label.config(bg="black", fg="white")
label.config(font=("Courier", 30))
label.grid(row=0)
label1 = Label(labelframe2, text="::USERS::")
label1.config(bg="black", fg="white")
label1.grid(row=0, column=0)
txtscroll = Text(labelframe3)
txtuserlist = Text(labelframe2)
txtmessage = Text(labelframe)
@client.event
async def on_message(message):
txtscroll.insert(END, "#" + str(message.channel) + ":" + " " + str(message.author) + ":" + " " + message.content + "\n")
x = message.server.members
for users in x:
txtuserlist.insert(END, str(users.name) + "\n")
@client.event
async def on_ready():
await client.change_presence(game=Game(name="GUI"))
txtscroll.insert(END, 'Logged in as' + "\n")
txtscroll.insert(END, client.user.name + "\n")
txtscroll.insert(END, client.user.id + "\n")
txtscroll.insert(END, '-----------------------' + "\n")
scrollbar = Scrollbar(labelframe3)
scrollbar.grid(row=1, column=1, sticky="ns")
txtscroll.config(width=60, height=20, bg="black", fg="white")
txtscroll.grid(row=1, pady=10, sticky=W)
scrollbar.config(bg="black", command=txtscroll.yview)
txtscroll.config(yscrollcommand=scrollbar.set)
txtmessage.config(width=49, height=1)
txtmessage.grid(row=2, column=0, sticky=W)
b = Button(labelframe, text="SEND",fg="white", command="send")
b.grid(row=2, column=1, padx=5)
txtuserlist.config(width=10, height=23)
txtuserlist.grid(row=1, column=0, padx=5, pady=5)
client.run(TOKEN)
root.mainloop()
有没有更好的方法来使用 client.run(TOKEN) 以便它可以工作?我认为与 root.mainloop() 冲突
【问题讨论】:
-
.run()和.mainloop()需要在不同的线程或进程中运行。他们都停止了程序,所以下一行永远不会运行,直到,就像你说的那样,tkinter 窗口关闭或不和谐机器人已经注销。 IMO 在同一个文件中包含不和谐和 TKinter 有点奇怪。
标签: python python-3.x tkinter discord discord.py