Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 特金特没有';我不想在使用discord.py时工作_Python_Python 3.x_Tkinter_Discord_Discord.py - Fatal编程技术网

Python 特金特没有';我不想在使用discord.py时工作

Python 特金特没有';我不想在使用discord.py时工作,python,python-3.x,tkinter,discord,discord.py,Python,Python 3.x,Tkinter,Discord,Discord.py,所以我的问题是,当我使用discord.py API时,tkinter窗口不会出现。但是,当我按ctrl+c退出tkinter窗口时,它会自动出现,我认为这与client.run(令牌)冲突,因为当我退出该行时,它会工作,但我的应用程序不会执行任何操作 from tkinter import * from discord.ext.commands import Bot from discord import Game TOKEN = "" BOT_PREFIX = "!" client = B

所以我的问题是,当我使用discord.py API时,tkinter窗口不会出现。但是,当我按ctrl+c退出tkinter窗口时,它会自动出现,我认为这与client.run(令牌)冲突,因为当我退出该行时,它会工作,但我的应用程序不会执行任何操作

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(令牌)使其工作?我认为它与root.mainloop()冲突,我对Tkinter不太熟悉,但当您运行行
client.run(TOKEN)
时,它会阻塞代码,直到bot停止工作,基本上不会到达下一行

在运行bot之前,您可能希望异步运行
root.mainloop()
。 您可以通过将该行放入异步函数中来实现这一点:

async def open_window():
    root.mainloop()
然后将其添加到事件循环:

client.loop.create_task(open_window())
client.run(TOKEN)
也许
root=Tk()
应该是
root=tkinter.Tk()

.

试着做:

导入tkinter

而不是


tkinter导入的
*

.run()
.mainloop()
需要在不同的线程或进程中运行。它们都会停止程序,以便下一行永远不会运行,直到tkinter窗口关闭或discord bot注销。在我看来,在同一个文件中出现discord和TKinter有点奇怪。感谢您的回复,我尝试了您发布的代码,现在TKinter窗口正在显示,但我的应用程序无法工作,无法连接到服务器。问题是
root.mainloop
不是异步函数,因此,在运行时将阻止async eventloop;因此,discord.py代码(以及尝试在eventloop中运行的任何其他代码)在tkinter窗口关闭之前仍将无法运行。