[英]Tkinter add Widgets (a Button) to a new second Frame
我創建了一個框架,並給了它一個菜單欄。 效果很好。 菜單欄中條目的目的是打開一個新框架,您可以在其中更改某些設置。 新Window的創建也起作用。 但是,我無法在新創建的窗口上創建小部件。 我用Button嘗試了一下,並收到一個TclError:無法調用“ button”命令:應用程序已被破壞
我試圖用Google搜索它,發現無法調用按鈕命令:應用程序已被破壞 ,對我沒有太大幫助。 此外,我發現一個解決方案是您必須創建一個父類(繼承自Frame),而不是在其中創建所有其他Frame,但是在第一個視圖上,它看起來非常復雜。 尤其是因為第二個窗口的創建似乎首先起作用。
我知道這可能是一個非常基本的問題,所以在此先感謝您的寶貴時間
def perfSettings():
perfFrame = Tk(className=" Performanz Einstellungen")
perfFrame.configure(bg='#F2F2F2')
perfFrame.geometry("300x300")
perfFrame.mainloop()
btn = Button(master=perfFrame, text='Speichern', command=myPerfSettingValue.getValues, width=37)
btn.pack()
# Button(perfFrame, text='Abbrechen', command=perfFrame.destroy, width=37).grid(row=0 ,column=1 )
class perfSettingsValue:
def __init__(self):
self.bvhSteps = 0
def getValues(self):
pass
#Hauptfenster
root = Tk(className="BoneMapping & SkeletonEstimation")
root.configure(bg='#F2F2F2')
root.geometry("1300x600")
myPerfSettingValue = perfSettingsValue()
menubar = Menu(root)
sdmenu = Menu(menubar, tearoff=0)
sdmenu.add_command(label="Performanz", command=perfSettings)
menubar.add_cascade(label='Einstellungen',menu=sdmenu)
root.config(menu=menubar)
這里的關鍵問題是,您試圖在啟動mainloop
之后嘗試添加一個按鈕,該按鈕有效地阻止了程序的執行。 您得到的錯誤是因為在關閉窗口后執行添加按鈕的行。
如果您像這樣修改函數,將解決您的問題:
def perfSettings():
perfFrame = Tk(className=" Performanz Einstellungen")
perfFrame.configure(bg='#F2F2F2')
perfFrame.geometry("300x300")
btn = Button(master=perfFrame, text='Speichern', command=myPerfSettingValue.getValues, width=37)
btn.pack()
perfFrame.mainloop()
這不是唯一的問題。 而不是創建新的Tk實例,您應該創建一個新的Toplevel實例,在您的情況下,該實例將僅充當Tk實例,但引起麻煩的可能性要小得多。
最后,您應該考慮閱讀有關設計tkinter應用程序的面向對象方法。 這里有太多的變體,無法在此進行適當的闡述,但是我當然建議您努力學習使用其中之一。 這將使您的代碼更易於理解和維護。 我通常的方法是為要使用的每種類型的窗口創建一個從Toplevel或Tk繼承的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.