我目前正在使用Tkinter和Python开发GUI。我创建的其中一个窗口上有两个按钮:一个用于重新启动单独的python脚本,另一个用于关闭整个程序。
当我点击“重启”按钮时,我希望它运行重启代码,然后销毁其上有两个按钮的窗口。我在SO上看到了其他东西,让你通过点击按钮一次运行两个命令,但我似乎无法让它工作。现在按钮的代码是:
buttonRestart = Button(restartWindow, text = "Restart", width = 8,
height=3, command = lambda: self.restartExternal() and
restartWinow.destroy)
执行时,似乎restartExternal
代码正在运行,但它也不会破坏窗口。任何建议将不胜感激!
答案 0 :(得分:2)
只需创建一个调用这两种方法的方法。为此创造一个额外的功能是没有羞耻的。这是一个更易于维护的解决方案,试图将一堆代码塞入lambda。
def on_restart(self):
self.restartExternal()
self.restartWinow.destroy()
buttonRestart = Button(..., command = self.on_restart)
答案 1 :(得分:0)
而不是Counter
你可以做self.restartExternal() and restartWindow.destroy
。这样,无论[self.restartExternal(), restartWindow.destroy()]
返回什么,都会调用restartWindow.destroy()
,而如果self.restartExternal()
返回False,Python甚至不检查self.restartExternal()
是否为True或假。除此之外,你的restartWindow.destroy
甚至没有被调用,因为你遗漏了括号。
答案 2 :(得分:0)
Bryan提出的答案看起来很合理,但是变化很小-您可以将函数列表提供给lambda函数,如下所示:
buttonRestart = Button(restartWindow, text = "Restart", width = 8,
height=3, command = lambda: [self.restartExternal(),
restartWinow.destroy()] )
我认为,至少两个功能看起来更好。