I am trying to create a program in which the user navigates through the screens with "Next" and "Previous" buttons. Editing the code from the selected answer here I have produced the following code:
import Tkinter as tk
import tkFont as tkfont
def cancel():
root.destroy()
def disable_event():
pass
#Set the parent (main/root) window
root = tk.Tk()
root.title("Some title")
root.geometry('700x500') #Width x Height
root.resizable(0, 0) #Make root unresizable and force the use of "Cancel" button
root.protocol("WM_DELETE_WINDOW", disable_event)
class InstallerApp(tk.Tk):
def __init__(self, *args, **kwargs):
self.title_font = tkfont.Font(family='Helvetica', size=18)
container = tk.Frame(root)
container.pack(side="top", fill="both", expand=True)
self.frames = {}
for F in (Intro, FirstPage):
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
self.show_frame("Intro")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
class Intro(tk.Frame):
def __init__(self, parent, controller):
Intro = tk.Frame.__init__(self, parent)
self.controller = controller
leftFrame = tk.Frame(Intro, height=500, width=250, bg="#000000")
leftFrame.pack(side="left")
middleFrame = tk.Frame(Intro, height=500, width=5)
middleFrame.pack(side="left")
rightFrame = tk.Frame(Intro, height=500, width=450, bg="#FFFFFF")
buttonFrame = tk.Frame(Intro, height=35, width=450, bg="#FFFFFF")
nextButton = tk.Button(buttonFrame, width=10, text="Next >", command=lambda: controller.show_frame("FirstPage")).grid(row=0, column=0)
div3 = tk.Frame(buttonFrame, bg="#FFFFFF", width=10).grid(row=0, column=1)
cancelButton = tk.Button(buttonFrame, text="Cancel", width=10, command=cancel).grid(row=0,column=2)
buttonFrame.pack_propagate(False)
buttonFrame.pack(side="bottom")
#Other child widgets to rightFrame managed by pack
rightFrame.pack_propagate(False)
rightFrame.pack_forget()
rightFrame.pack(side="right")
class FirstPage(tk.Frame):
#the same code with "previousButton"
However, when I execute the code I notice that even if the show_frame
function is called the FirstPage does not appear and that if I resize the main window it gradually appears from behind the Intro. When I run the original code, it works perfectly.
Is the problem because I am using the pack()
manager while the original code uses grid()
or what? Can somebody provide with a sample code?
P.S.: I have seen other questions but they all use grid()
. I am using python 2.7.