【发布时间】:2017-01-05 10:20:25
【问题描述】:
我创建了一个框架,给它一个菜单栏。工作得很好。在菜单栏中输入的目的是打开一个新框架,您可以在其中更改一些设置。新窗口的创建也有效。但是我无法在新创建的窗口上创建小部件。我用一个按钮试了一下,得到了一个 TclError:无法调用“按钮”命令:应用程序已被销毁
我试图用谷歌搜索它并找到Cannot invoke button command: application has been destroyed 这对我没有太大帮助。 此外,我发现一个解决方案是你必须创建一个父类(它继承自 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)
【问题讨论】:
-
不要创建第二个 Tk 实例。改用 Toplevel 并且 mainloop 应该在这个的末尾。您应该阅读更多关于 mainloop 是什么以及它的作用。