Python-在 Tkinter 中切换 windows 时列表框项目不会终止
Python-Listbox item doesn't terminate when switching windows in Tkinter
我的 Python 代码有问题,我正在使用 Tkinter 制作应用程序并在 windows 之间切换,其中一个 windows 具有以下代码:
def __init__(self, master):
tk.Frame.__init__(self, master)
master.title("Chain Targets:")
master.geometry("400x800")
tk.Label(self, text="Chain Targets").grid()
self.sbox = tk.Listbox(master)
self.sbox.grid(row=0, column=0)
number=1
for k in sorted(target_list, key=target_list.get, reverse=True):
place_target= str(number) + " " + k + " " + str(target_list[k])
self.sbox.insert(number,place_target)
number+=1
tk.Scrollbar.grid(self)
tk.Button(self, text="Main Menu",
command=lambda: master.switch_frame(MainPage)).grid()
现在一切正常,除了使用 switch_frame 函数时列表框停留在新屏幕中,switch_frame 函数如下:
def switch_frame(self, frame_class):
"""Destroys current frame and replaces it with a new one."""
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.grid()
不知何故,我无法理解 self._frame.destroy() 不会破坏列表框并且它保留在顶部的每个 window 中,其余的我的代码做它打算做的一切。我希望有人知道我缺少什么。
问题是您将 master
设置为列表框父项。请改用 self.sbox = tk.Listbox(self)
。希望对您有所帮助!
我的 Python 代码有问题,我正在使用 Tkinter 制作应用程序并在 windows 之间切换,其中一个 windows 具有以下代码:
def __init__(self, master):
tk.Frame.__init__(self, master)
master.title("Chain Targets:")
master.geometry("400x800")
tk.Label(self, text="Chain Targets").grid()
self.sbox = tk.Listbox(master)
self.sbox.grid(row=0, column=0)
number=1
for k in sorted(target_list, key=target_list.get, reverse=True):
place_target= str(number) + " " + k + " " + str(target_list[k])
self.sbox.insert(number,place_target)
number+=1
tk.Scrollbar.grid(self)
tk.Button(self, text="Main Menu",
command=lambda: master.switch_frame(MainPage)).grid()
现在一切正常,除了使用 switch_frame 函数时列表框停留在新屏幕中,switch_frame 函数如下:
def switch_frame(self, frame_class):
"""Destroys current frame and replaces it with a new one."""
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.grid()
不知何故,我无法理解 self._frame.destroy() 不会破坏列表框并且它保留在顶部的每个 window 中,其余的我的代码做它打算做的一切。我希望有人知道我缺少什么。
问题是您将 master
设置为列表框父项。请改用 self.sbox = tk.Listbox(self)
。希望对您有所帮助!