【发布时间】:2018-05-03 06:33:03
【问题描述】:
在其中一个视图中有一个用于关闭实际视图的按钮,它可以工作,但是当我尝试再次打开该视图时,它会显示下一个错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1545, in __call__
return self.func(*args)
File "/home/htm97/Documents/data/workspace/repositories/projects-h/locker-system/src/gui/MainMenu.py", line 27, in verify_lockers_window
self.app = vl.Lockers(self.vlWindow)
File "/home/htm97/Documents/data/workspace/repositories/projects-h/locker-system/src/gui/Lockers.py", line 19, in __init__
self.buttonsList[i].grid(columnspan = 4)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 2032, in grid_configure
+ self._options(cnf, kw))
TclError: bad window path name ".140687059771120.140687059776216.140687059776504.140687059776576"
销毁窗口的函数是:
def close_windows(self):
"This function destroys the window"
self.master.destroy()
这是视图:
import Tkinter as tk
class Lockers:
lockerList = ["1", "2", "3", "4", "5"]
buttonsList = []
def __init__(self, master):
self.master = master
self.frame = tk.Frame(self.master)
self.master.minsize(width = 250, height = 200)
self.initialize_lockers()
self.frame.grid()
tk.Label(self.frame, text = "Seleccione el locker que desea revisar:").grid(row = 0, columnspan = 4)
i = 0
while i < len(self.lockerList):
self.buttonsList[i].grid(columnspan = 4) #HERE THE ERROR
i += 1
tk.Label(self.frame, text = "").grid(columnspan = 4)
self.quitButton = tk.Button(self.frame, text = 'Salir', width = 8, command = self.close_windows)
self.quitButton.grid(column = 1, columnspan = 2)
函数initialize_lockers() 将一些按钮附加到buttonsList。
阅读了一段时间后,我发现在执行destroy() 并尝试网格化某些内容后会显示错误,但我不明白为什么。
【问题讨论】:
-
如何尝试再次打开?你破坏了窗口,所以你必须重新创建它。
-
destroy完全符合其名称。销毁小部件后,您将无法再次使用它。如果要隐藏小部件,请使用grid_forget而不是destroy(或wm_iconifyTk小部件) -
“你如何尝试再次打开?你破坏了窗口,所以你必须重新创建它”@furas。当我销毁它时,我按下创建视图的按钮,它会打开一个窗口,但列表中没有对象。感谢您的回答
-
"destroy 就像它的名字所说的那样。销毁一个小部件后,你不能再次使用它。如果你想隐藏一个小部件,请使用 grid_forget 而不是destroy(或在 Tk 小部件上使用 wm_iconify) 。” @煤炭_。我尝试使用
grid_forget(),但它只删除了窗口中的小部件,并没有关闭窗口。我想要做的是关闭窗口并再次打开它而没有问题。感谢您的回答。 -
self.app = vl.Lockers(self.vlWindow)的代码在哪里?self.vlWindow是什么?当您再次打开时,您是否重新创建了self.vlWindow?您不必在评论中引用我们的评论。而且您没有“感谢您的回答”。
标签: python python-2.7 tkinter tkinter-layout