def createButtons(self):
        tmp = False

        def placeholder():
            pass

        self.button1 = MyButton(self.mainFrame, 'Convert!', self.gotoMain,
                                0.25, 0.20)
        if tmp:
            self.button2 = MyButton(self.mainFrame, 'Button2', placeholder,
                                    0.25, 0.30)
            self.button3 = MyButton(self.mainFrame, 'Button3', placeholder,
                                    0.25, 0.40)
            self.button4 = MyButton(self.mainFrame, 'Button4', placeholder,
                                    0.25, 0.50)
            self.button5 = MyImageButton(
                self.mainFrame, GrayScale(20),
                createTkImage('data/images/preferences.png', 48, 48),
                self.gotoPreferences, 0.425, 0.65)

        self.button1.place(relwidth=0.50)
        if tmp:
            self.button2.place(relwidth=0.50)
            self.button3.place(relwidth=0.50)
            self.button4.place(relwidth=0.50)
            self.button5.place(relwidth=0.15, relheight=0.075)
class PreferencesPage(object):
    def __init__(self, root):
        self.root = root

        self.defaults()

    def defaults(self):
        self.createFrame()
        self.createTitle()
        self.createWidthEntry()
        self.createHeightEntry()
        self.createFontEntry()
        self.createFontSizeEntry()
        self.createToolTipToggle()
        self.createDevToggle()
        self.createResetButton()
        self.createSaveButton()

        self.setAll()

    def createFrame(self):
        self.mainFrame = MyFrame(self.root, GrayScale(20))

    def createTitle(self):
        self.title_label = MyLabel(self.mainFrame, 'Modify Program Settings',
                                   0.05, 0.05)
        self.title_label.configure(font=MyFonts['ExtraLargeBold'])
        self.title_label.place(relwidth=0.9)

    def createWidthEntry(self):
        self.width_entry = MyEntry(self.mainFrame, 'Window Width (pixels)',
                                   0.25, 0.20)
        self.width_entry.label.place(relwidth=0.90, relx=0.05)
        self.width_entry.place(relwidth=0.50)

    def createHeightEntry(self):
        self.height_entry = MyEntry(self.mainFrame, 'Window Height (pixels)',
                                    0.25, 0.325)
        self.height_entry.label.place(relwidth=0.90, relx=0.05)
        self.height_entry.place(relwidth=0.50)

    def createFontEntry(self):
        self.font_entry = MyEntry(self.mainFrame, 'Font Name', 0.25, 0.450)
        self.font_entry.label.place(relwidth=0.90, relx=0.05)
        self.font_entry.place(relwidth=0.50)

    def createFontSizeEntry(self):
        self.font_size_entry = MyEntry(self.mainFrame, 'Font Size (points)',
                                       0.25, 0.575)
        self.font_size_entry.label.place(relwidth=0.90, relx=0.05)
        self.font_size_entry.place(relwidth=0.50)

    def createToolTipToggle(self):
        self.tooltips_button = MyToggleButton(self.mainFrame, 'Tooltips', 0.20,
                                              0.70)

    def createDevToggle(self):
        self.dev_button = MyToggleButton(self.mainFrame, 'Developer', 0.60,
                                         0.70)

    def createResetButton(self):
        self.reset_button = MyImageButton(
            self.mainFrame, GrayScale(20),
            createTkImage('data/images/reset.png', 48, 48), self.funcReset,
            0.30, 0.85)
        self.reset_button.place(relwidth=0.14, relheight=0.07)

    def createSaveButton(self):
        self.save_button = MyImageButton(
            self.mainFrame, GrayScale(20),
            createTkImage('data/images/save.png', 48, 48), self.funcSave, 0.56,
            0.85)
        self.save_button.place(relwidth=0.14, relheight=0.07)

    def clearALL(self):
        # clear all entries in GUI
        self.width_entry.delete(0, END)
        self.height_entry.delete(0, END)
        self.font_entry.delete(0, END)
        self.font_size_entry.delete(0, END)

    def setAll(self):
        # set all entries in GUI from imported vars from preferences.py
        self.clearALL()

        self.width_entry.insert(0, str(config_width))
        self.height_entry.insert(0, str(config_height))
        self.font_entry.insert(0, str(config_font))
        self.font_size_entry.insert(0, str(config_font_size))

        if config_tooltips:
            self.tooltips_button.func1()
        else:
            self.tooltips_button.func2()

        if dev:
            self.dev_button.func1()
        else:
            self.dev_button.func2()

    def checkAll(self):
        # checking that values are reasonable
        # currently only checks that resolution is 16 by 9 and is a common resolution
        input_width = self.width_entry.get()
        input_height = self.height_entry.get()

        width_list = ['1280', '1920', '2560', '3840']
        height_list = ['720', '1080', '1440', '2160']

        if input_width not in width_list \
                or input_height not in height_list \
                or float(input_width) / float(input_height) != 16.0 / 9:
            showwarning(
                'Resolution Warning!',
                'You have selected a non standard resolution\n'
                'This may cause visual errors\n')
            return True

        else:
            return True

    def funcReset(self):
        # reset to defaults
        self.clearALL()

        self.width_entry.insert(0, '1280')
        self.height_entry.insert(0, '720')
        self.font_entry.insert(0, 'Helvetica')
        self.font_size_entry.insert(0, '12')

        setattr(self.tooltips_button, 'enabled', True)
        self.tooltips_button.frame2.tkraise()

        setattr(self.dev_button, 'enabled', True)
        self.dev_button.frame2.tkraise()

    def funcSave(self):
        # save and write to config
        if self.checkAll():
            writePreferences(self.width_entry.get(), self.height_entry.get(),
                             self.font_entry.get(), self.font_size_entry.get(),
                             getattr(self.tooltips_button, 'enabled'),
                             getattr(self.dev_button, 'enabled'))

        showinfo('Settings Saved', 'Settings Saved, click OK to restart')

        programRestart()
 def createSaveButton(self):
     self.save_button = MyImageButton(
         self.mainFrame, GrayScale(20),
         createTkImage('data/images/save.png', 48, 48), self.funcSave, 0.56,
         0.85)
     self.save_button.place(relwidth=0.14, relheight=0.07)
 def createResetButton(self):
     self.reset_button = MyImageButton(
         self.mainFrame, GrayScale(20),
         createTkImage('data/images/reset.png', 48, 48), self.funcReset,
         0.30, 0.85)
     self.reset_button.place(relwidth=0.14, relheight=0.07)
class StartPage(object):
    FT_main = True
    FT_preferences = True

    def __init__(self, root):
        self.root = root

        self.defaults()

    def defaults(self):
        self.createFrame()
        self.createTitle()
        self.createButtons()
        self.createCreditsLabel()

    def createFrame(self):
        self.mainFrame = MyFrame(self.root, GrayScale(20))

    def createTitle(self):
        self.titleLabel = MyLabel(self.mainFrame, 'Welcome!', 0.25, 0.10)
        self.titleLabel.configure(font=MyFonts['ExtraLargeBold'])
        self.titleLabel.place(relwidth=0.50)

    def createButtons(self):
        tmp = False

        def placeholder():
            pass

        self.button1 = MyButton(self.mainFrame, 'Convert!', self.gotoMain,
                                0.25, 0.20)
        if tmp:
            self.button2 = MyButton(self.mainFrame, 'Button2', placeholder,
                                    0.25, 0.30)
            self.button3 = MyButton(self.mainFrame, 'Button3', placeholder,
                                    0.25, 0.40)
            self.button4 = MyButton(self.mainFrame, 'Button4', placeholder,
                                    0.25, 0.50)
            self.button5 = MyImageButton(
                self.mainFrame, GrayScale(20),
                createTkImage('data/images/preferences.png', 48, 48),
                self.gotoPreferences, 0.425, 0.65)

        self.button1.place(relwidth=0.50)
        if tmp:
            self.button2.place(relwidth=0.50)
            self.button3.place(relwidth=0.50)
            self.button4.place(relwidth=0.50)
            self.button5.place(relwidth=0.15, relheight=0.075)

    def createCreditsLabel(self):
        credits_text = 'Created By: Yaqin Hasan'
        self.creditsLabel = MyLabel(self.mainFrame, credits_text, 0.25, 0.75)
        self.creditsLabel.configure(font=MyFonts['Default'], fg=GrayScale(180))
        self.creditsLabel.place(relwidth=0.50, relheight=0.25)

    def createMain(self):
        self.mainPage = MainPage(self.root)

    def createPreferences(self):
        self.preferencesPage = PreferencesPage(self.root)

    def gotoMain(self):
        if self.FT_main:
            self.createMain()
            self.FT_main = False
        self.root.geometry(makeGeometry(self.root, config_width,
                                        config_height))
        self.mainPage.mainFrame.tkraise()

    def gotoPreferences(self):
        if self.FT_preferences:
            self.createPreferences()
            self.FT_preferences = False

        self.preferencesPage.mainFrame.tkraise()