Python 如何通过按下按钮隐藏框架的一部分

Python 如何通过按下按钮隐藏框架的一部分,python,tkinter,Python,Tkinter,我有一扇由两部分组成的窗户。一部分是做一些设置。我想隐藏它,直到用户按下设置按钮。是否可以隐藏框架中包含许多小部件的部分? 我已经看到了很多在tkinter中隐藏小部件的例子(例如pack_-forget和grid_-forget)。在我的例子中,我试图通过按下按钮(包含多个小部件)来隐藏框架的一部分。有什么建议吗 由于某些问题,我不能使用多个帧 import tkinter as tk def startFn(): pass #fn body def stopFn():

我有一扇由两部分组成的窗户。一部分是做一些设置。我想隐藏它,直到用户按下设置按钮。是否可以隐藏框架中包含许多小部件的部分? 我已经看到了很多在tkinter中隐藏小部件的例子(例如pack_-forget和grid_-forget)。在我的例子中,我试图通过按下按钮(包含多个小部件)来隐藏框架的一部分。有什么建议吗 由于某些问题,我不能使用多个帧

import tkinter as tk
def startFn():
    pass
    #fn body
def stopFn():
    pass
    #fn body

def FnToShow():
    pass
    #fn body ???
def FnToHide():
    pass
    #fn body ???

root = tk.Tk()
root.geometry('600x400')

#two containers like this.
#trying to hide container_2 untill the user press settingBtn

container_1 = tk.Frame(root, borderwidth=2, relief="solid")
container_2 = tk.Frame(root, borderwidth=2, relief="solid")

startBtn = tk.Button(container_1, text = "Start", command =startFn)
startBtn.grid(row=4, column=4)
stopBtn  = tk.Button(container_1, text = "Stop", command= stopFn)
stopBtn.grid(row=5, column=4)
settingBtn  = tk.Button(container_1, text = "Settings", command= FnToShow)
settingBtn.grid(row=6, column=4)


setting_1 = tk.Label(container_2, text = "Setting-1", fg='#000000')
setting_1.grid(row=3, column=10)
setting_2 = tk.Label(container_2, text = "Setting-2", fg='#000000')
setting_2.grid(row=4, column=10)
closeSettingBtn  = tk.Button(container_2, text = "close Settings", command= FnToHide)
closeSettingBtn.grid(row=5, column=10)

container_1.pack(side="left", expand=True, fill="x", padx=1, pady=1)
container_2.pack(side="right",expand=True, fill="x", padx=1, pady=1)
root.mainloop()

您可以使用函数
FnToShow
fntoshide
显示/隐藏整个
容器2

大概是这样的:

import tkinter as tk


def startFn():
    pass

def stopFn():
    pass

def FnToShow():
    container_2.pack(side="right",expand=True, fill="x", padx=1, pady=1)

def FnToHide():
    container_2.pack_forget()


root = tk.Tk()
root.geometry('600x400')

container_1 = tk.Frame(root, borderwidth=2, relief="solid")
container_2 = tk.Frame(root, borderwidth=2, relief="solid")

startBtn = tk.Button(container_1, text="Start", command =startFn)
startBtn.grid(row=4, column=4)
stopBtn  = tk.Button(container_1, text="Stop", command= stopFn)
stopBtn.grid(row=5, column=4)
settingBtn  = tk.Button(container_1, text="Settings", command= FnToShow)
settingBtn.grid(row=6, column=4)


setting_1 = tk.Label(container_2, text="Setting-1", fg='#000000')
setting_1.grid(row=3, column=10)
setting_2 = tk.Label(container_2, text="Setting-2", fg='#000000')
setting_2.grid(row=4, column=10)
closeSettingBtn  = tk.Button(container_2, text="close Settings", command= FnToHide)
closeSettingBtn.grid(row=5, column=10)

container_1.pack(side="left", expand=True, fill="x", padx=1, pady=1)
root.mainloop()

对同一个问题还有一个疑问。是否可以根据容器2的显示/隐藏来移动小部件的位置。我的意思是当container_2隐藏时,container_1小部件应该位于整个窗口的中间,也就是说当container_2显示时,container_1小部件应该向左移动。诸如此类?是的,您可以尝试使用
pack
的各种参数,并在函数
FnToShow
fntoshide
中重新定位
container\u 1
container\u 2
。您还可以尝试使用弹出新窗口的
tk.Toplevel
窗口来调整设置值。