【发布时间】:2020-03-28 19:16:24
【问题描述】:
我有一个正在开发的程序,为了将它保存在同一个窗口中,我将我的小部件放在一个框架中。当我想更改窗口时,我使用 frame.pack_forget() 或 frame.grid_forget(),然后使用 frame.destroy(),然后简单地将新框架添加到新窗口。但是,即使使用了 grid_forget,如果我使用 .pack(),我也会收到一条错误消息,指出当某些东西已经由网格管理时,我不能使用 pack。有谁知道如何规避这一点,同时仍将所有内容保持在同一个窗口内?
.pack_forget 似乎工作正常,因为我可以毫无问题地从使用 pack 的框架过渡到使用 grid 的框架。
这是问题的重现:
from tkinter import *
root = Tk()
def main_Menu (root):
frame = Frame(root)
frame.pack()
button = Button(frame, text="button ", command=lambda:[frame.pack_forget(), frame.destroy, function(root)])
button.pack()
def function(root):
frame = Frame(root)
frame.grid(row=0)
back_Button = Button(root, text="Back", command=lambda:[frame.grid_forget(), frame.destroy(), return_To_Menu(root)])
back_Button.grid(row=0)
def return_To_Menu(root):
main_Menu(root)
main_Menu (root)
【问题讨论】:
-
请向我们展示您的代码。
-
FWIW,如果您通过销毁小部件来遵循该功能,则无需调用任何“忘记”功能。请edit您的问题包括minimal reproducible example。如果您遇到您所说的错误,则几乎可以肯定还有另一个窗口由
grid管理。您要问的“规避”是不要将pack和grid用于具有相同主控的小部件。 -
好的,我的最小可重现示例已添加。
标签: python python-3.x tkinter