master_yoda
master_yoda

Reputation: 483

How to hide a part of the frame through button pressing

I have a window with two parts. One part is to do some settings. I want to hide it until the user press a setting button. is it possible to hide a part of the frame that contains many widgets? I have seen many examples to hide a widget in tkinter (eg. pack_forget and grid_forget). In my case, I am trying to hide a part of the frame through a button press (that contains more than one widgets). Any suggestions please I can't use more than one frames because of some issues.

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()

Upvotes: 1

Views: 1079

Answers (1)

Reblochon Masque
Reblochon Masque

Reputation: 36682

You could show/hide the entire container_2 using the functions FnToShow and FnToHide:

something like this:

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()

Upvotes: 3

Related Questions