【问题标题】:grid_forget() still leads to error when using pack later on稍后使用 pack 时 grid_forget() 仍然会导致错误
【发布时间】: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)

【问题讨论】:

标签: python python-3.x tkinter


【解决方案1】:

您的打包按钮附加到框架,而网格按钮附加到根。

改变后

    back_Button = Button(root, text="Back", command=lambda:[frame.grid_forget(), frame.destroy(), return_To_Menu(root)])
    back_Button.grid(row=0)

    back_Button = Button(frame, text="Back", command=lambda:[frame.grid_forget(), frame.destroy(), return_To_Menu(root)])
    back_Button.grid(row=0)

它对我有用。

【讨论】:

    猜你喜欢
    • 2017-02-20
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多