【问题标题】:Can't invoke "button" command: application has been destroyed and I didn't find the fix无法调用“按钮”命令:应用程序已被破坏,我没有找到修复程序
【发布时间】:2022-08-03 05:04:59
【问题描述】:

当我执行此代码时

gui = Tk() 
def GUI():
    global gui
    gui.geometry(\"1920x1080\")



    gui.mainloop()
    menu()

def menu():
    
    global mdb
    mdb = Button(gui, text= \"DOWNLOAD\", command = txt_input , width = \"40\", height = \"10\")
    mdb.place(x = 925, y= 470)
    mdb.pack

    gui.mainloop()


def txt_input():
    ## zapise tkinter zalezitosti ako globalne
    global menu,itxt,itxtb
    ##odstrani to tlacitko DOWNLOAD ktore zobrazovalo entry a dalsie tlacitko
    mdb.pack_forget()
    ##vytvori to tlacitko ktore vrati cloveka do menu
    menu = Button(gui, text= \"MENU\", command = backtomenu)
    menu.pack()
    ##vytvori policko na zadavanie youtube url
    itxt= Entry(gui)
    itxt.place(x= 860, y=440, width= 200, height=24)
    itxt.pack

    ##vytvori tlacitko ktore spusti get_entry funkciu
    itxtb= Button(gui, text= \"DOWNLOAD\", command = get_entry)
    itxtb.place(x = 925, y= 470)
    itxtb.pack

    gui.mainloop()

##ziska text ktori bol zadany do itxt
def get_entry():
    global y
    y = itxt.get()
    ##zavola funkciu na stiahnutie audia
    download_audio()

##odstrani veci ktore boli na okne a vrati cloveka do menu
def backtomenu():
    menu()

    itxt.destroy
    itxtb.destroy
    menu.destroy

    gui.mainloop()


GUI()

但是当我执行它时,我得到了这个错误

Traceback (most recent call last):
File \"D:\\projektdavidnemecek\\YOUTUBE-MP3-DOWNLOADER AND PLAYER-DavidNemecek.py\", line 110, in              <module>
GUI()
File \"D:\\projektdavidnemecek\\YOUTUBE-MP3-DOWNLOADER AND PLAYER-DavidNemecek.py\", line 53, in GUI
menu()
File \"D:\\projektdavidnemecek\\YOUTUBE-MP3-DOWNLOADER AND PLAYER-DavidNemecek.py\", line 58, in menu
mdb = Button(gui, text= \"DOWNLOAD\", command = txt_input , width = \"40\", height = \"10\")
File \"C:\\Users\\FRESH DUFF\\AppData\\Local\\Programs\\Python\\Python39\\lib\\tkinter\\__init__.py\", line 2650, in __init__
Widget.__init__(self, master, \'button\', cnf, kw)
File \"C:\\Users\\FRESH DUFF\\AppData\\Local\\Programs\\Python\\Python39\\lib\\tkinter\\__init__.py\", line 2572, in __init__
self.tk.call(
_tkinter.TclError: can\'t invoke \"button\" command: application has been destroyed

我不知道如何修复它,我无法在互联网上找到任何修复程序。如果我将 GUI() 函数与 menu() 函数合并,它决定工作。

    标签: tkinter tkinter-button


    【解决方案1】:

    mainloop() 在窗口被销毁之前不会返回。您在窗口被销毁后调用menu(),就像错误告诉您的那样,在根窗口被销毁后您无法创建按钮。

    您还遇到了不止一次调用mainloop() 的问题。在设计良好的 tkinter 应用程序中,您应该只调用一次,并且不要在其后运行任何 tkinter 代码。

    【讨论】:

    • 有没有办法在不使用 mainloop() 的情况下重新加载窗口?因为我有感觉,但我已经忘记了
    • @FRESHDUFF:在调用 mainloop 后,没有什么可以阻止您重新加载代码。例如,您可以创建一个新的根窗口,但我建议这是一种反模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2014-03-05
    • 1970-01-01
    • 2022-06-17
    • 2021-06-12
    相关资源
    最近更新 更多