【问题标题】:Getting a not Definded error when the program tries to close the window? [closed]程序尝试关闭窗口时出现未定义错误? [关闭]
【发布时间】:2019-05-20 19:23:07
【问题描述】:

正在尝试使用 Tkinter 和 Gui 创建,并且似乎无法在按下一个按钮后运行两个命令。

我已经尝试将第二个定义从第一个定义中移出到与以前相同的错误。问题是它是我的主窗口的一个单独窗口,因此具有不同的定义含义。当我尝试了以前的线程答案时,它对我不起作用。

def cheese():
    fll = Tk()

    #The two commands linked together
    def fildes():
        filling2()
        fll.destroy

    fll.title=("Test")

    ll = Label(fll, text ="Would you like to choose another topping?").pack()
    #The button under this runs fildes()
    bb = Button(fll, text ="Yep", command = fildes).pack()
    bbb = Button(fll, text ="No", command = fll.destroy).pack()

它应该创建一个窗口,当按下是按钮时打开一个新窗口,同时关闭当前窗口。

它打开新窗口,但由于未定义 fll 而无法删除当前窗口

    def fildes():
        filling2()
        fll.destroy()

这个也不行

【问题讨论】:

  • 我看了看,这就是为什么我写了这篇文章,这些答案似乎都不适合我?我认为这是因为它在一个定义中,因为它来自另一个按钮到这个按钮。
  • 在上面的代码中,你没有在fildes调用 destroy
  • 好的,我可以在 fildes 内部调用 destroy 吗?
  • 应该是fll.destroy(),而不是fll.destroy里面的fildes

标签: python-3.x tkinter


【解决方案1】:

解决方案:

始终尝试将参数传递给您的函数。如果我没看错的话,Tkinter 只会调用独立的 filedes() 函数,而不知道 cheese 中的局部变量。

将要销毁的窗口传递给 filedes,如下所示:

def fildes(old:Tk):
    old.destroy()
    filling2()

然后fll作为参数添加到按钮的命令中。 (Can be done like this.)

bb = Button(fll, text ="Yep", command = lambda: fildes(fll))


PS

当我尝试运行您的代码时,我必须像这样调用.pack(),否则它将无法正常工作:

sample = Button()
sample.pack()

【讨论】:

  • PPS:这个问题的标题似乎不适合这个问题,因为您已经解决了通过包装函数传递多个参数的问题。我会建议你改变它。
  • 会的。我稍后在代码中运行 .pack() 所以它不在这里
  • 我该如何运行fill2()?
  • 只需将filling2() 放在我将cheese() 放入filedes 的地方。我编辑了它
  • 是的,谢谢
猜你喜欢
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多