Oct-24-2020, 05:59 PM
Any help is appreciated. I'm trying to create main window(quiz), on click start button I want to switch the frame(pagetwo)etc.
from tkinter import * from tkinter import messagebox from tkinter import Tk import sqlite3 # Creating DB - (questioner.db) con = sqlite3.connect('questioner.db') cur = con.cursor() # Frames Controller class MainFunc(Tk): def __init__(self, *args, **kwargs): Tk.__init__(self, *args, **kwargs) container = Frame(self) container.pack(side="top", fill="both", expand = True) container.grid_rowconfigure(0, weight=1) container.grid_columnconfigure(0, weight=1) self.frames = {} for F in (Questionnaire, PageOne, PageTwo): frame = F(container, self) self.frames[F] = frame frame.grid(row=0, column=0, sticky="nsew") self.show_frame(Questionnaire) def show_frame(self, cont): frame = self.frames[cont] frame.tkraise() class Questionnaire: def __init__(self, master, controller): # Main Frame header = Frame(master) header.grid(row=0, sticky='news',pady = 50, padx = 25) content = Frame(master) content.grid(row=1, sticky='N', pady = 50, padx = 25) footer = Frame(master) footer.grid(row=2, sticky='news', pady = 50, padx = 25) root.columnconfigure(0, weight=1) # 100% root.rowconfigure(0, weight=2) # 10% root.rowconfigure(1, weight=7) # 80% root.rowconfigure(2, weight=1) # 10% # Student Name self.lbl_studetname = Label(header, text = 'Student Name: ') self.lbl_studetname.grid(row = 0, column = 1, sticky = W) self.entStudentname = Entry(header, width = 20) self.entStudentname.grid(row = 0, column = 2, sticky = W) # Student Surname self.lbl_studetsurname = Label(header, text = 'Student Surname: ') self.lbl_studetsurname.grid(row = 0, column = 3, padx = (20,0), sticky = W) self.entStudentsurname = Entry(header, width = 20) self.entStudentsurname.grid(row = 0, column = 4, sticky = W) # Student ID Card self.lbl_studetId = Label(header, text = 'Student ID card: ') self.lbl_studetId.grid(row = 0, column = 5, padx = (20,0), sticky = W) self.entStudentId = Entry(header, width = 20) self.entStudentId.grid(row = 0, column = 6, sticky = W) # Quistioner Guide self.lbl_guide = Label(content, text = 'Please read the questions carefully, you have 45 minutes to finish the quiz. \n Any questions regarding the quiz please raise your hand and do not disturb your colleagues!') self.lbl_guide.grid(row = 1, column = 2, columnspan = 4) # Start Button self.startButton = Button(content, text = 'START', padx = 20, command=lambda: controller.show_frame(PageOne)) self.startButton.grid(row = 3, column = 4, pady = 50, sticky = W) # Statistic self.lbl_studentCounter = Label(footer, text = 'Taken:') self.lbl_studentCounter.grid(row = 0, column = 0, padx = 5) self.lbl_avgscore = Label(footer, text = 'Average Score:') self.lbl_avgscore.grid(row = 0, column = 1, padx = 5) self.lbl_lowestScore = Label(footer, text = 'Lowest Score:') self.lbl_lowestScore.grid(row = 0, column = 2, padx = 5) self.lbl_highestScore = Label(footer, text = 'Highest Score:') self.lbl_highestScore.grid(row = 0, column = 3, padx = 5) # Page One class PageOne(Frame): def __init__(self, parent, controller): Frame.__init__(self, parent) self.controller = controller label = Label(self, text="This is page 1") label.pack(side="top", fill="x", pady=10) button = Button(self, text="Next Page", command = lambda : controller.show_frame("PageTwo")) button.pack() # Page Two class PageTwo(Frame): def __init__(self, parent, controller): Frame.__init__(self, parent) self.controller = controller label = Label(self, text="This is page 2") label.pack(side="top", fill="x", pady=10) button = Button(self, text="Next Page", command = lambda : controller.show_frame("StartPage")) button.pack() root = Tk() app = MainFunc(Tk) root.title('Qustioner Quiz') root.geometry("800x600+600+200") root.iconbitmap('icon.ico') root.resizable(False, False) root.mainloop()