Пример #1
0
class VerticalScrollPack(Frame):
    def __init__(self, root):
        Frame.__init__(self, root)
        self.canvas = Canvas(root, borderwidth=0)
        self.frame = Frame(self.canvas)
        self.vsb = Scrollbar(root,
                             orient="vertical",
                             command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)
        self.vsb.pack(side="right", fill="y")
        self.canvas.pack(side="left", fill="both", expand=True)
        self.canvas.create_window((4, 4),
                                  window=self.frame,
                                  anchor="nw",
                                  tags="self.frame")
        self.frame.bind("<Configure>", self.onFrameConfigure)
        self.frame.bind_all("<MouseWheel>", self.on_mousewheel)

    def onFrameConfigure(self, event):
        '''Reset the scroll region to encompass the inner frame'''
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

    def on_mousewheel(self, event):
        self.canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")

    def go_to_top(self, event=None):
        self.canvas.yview_moveto(0)
Пример #2
0
class VerticalScrollGrid(Frame):
    def __init__(self, root):
        Frame.__init__(self, root)
        self.canvas = Canvas(root, borderwidth=0)
        self.frame = Frame(self.canvas)
        self.vsb = Scrollbar(root,
                             orient="vertical",
                             command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)
        self.vsb.grid(row=0, column=1, sticky='NS')
        self.vsb.configure(command=self.canvas.yview)
        self.canvas.grid(row=0, column=0, sticky='NSEW')
        self.canvas.create_window((4, 4),
                                  window=self.frame,
                                  anchor="nw",
                                  tags="self.frame")
        self.frame.bind("<Configure>", self.onFrameConfigure)
        self.frame.bind_all("<MouseWheel>", self.on_mousewheel)
        # self.frame.bind("<Button-4>", self.on_mousewheel_up)
        # self.frame.bind("<Button-5>", self.on_mousewheel_down)
    def onFrameConfigure(self, event):
        '''Reset the scroll region to encompass the inner frame'''
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

    # def on_mousewheel_down(self, event): self.canvas.yview_scroll(1, "units")
    # def on_mousewheel_up(self, event): self.canvas.yview_scroll(-1, "units")
    def on_mousewheel(self, event):
        self.canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")

    def go_to_top(self, event=None):
        self.canvas.yview_moveto(0)
Пример #3
0
# lbl_display = Label()

# ent_text = Entry()
# btn_start = Button(text="Start")
# btn_finish = Button(text="Finish")
# btn_restart = Button(text="Restart")
# Label to display words
# Highlight current word
# matching character to character, no reversed

# try again button
# something like speedtest?

frame = Frame(app, width=100, height=100)
frame.bind_all("<Key>",key)
frame.pack()
# lbl_display.grid(row=0, column=0, columnspan=3)
# ent_text.grid(row=1, column=0, columnspan=3)
# btn_start.grid(row=2, column=0)
# btn_finish.grid(row=2, column=1)
# btn_restart.grid(row=2, column=2)

# FEATURES

# words per minute
# accuracy
# mistakes
# difficulty levels

    class SettingsWindow:
        def __init__(self, parent):
            self.parent = parent
            self.settings = Settings(self.parent.settings)
            self.settings.edit_flag = False
            self.frame0 = Frame(self.parent)
            self.title = Label(self.frame0, text='Settings', font='arial 20')
            self.BackButton = Button(self.title,
                                     text='<< Back',
                                     background='#888',
                                     foreground='#000',
                                     padx='0',
                                     width='8',
                                     pady='0',
                                     command=self.back)
            self.frame1 = Frame(self.parent,
                                relief='groove',
                                bd=1,
                                height=150,
                                width=480)
            self.frame1.pack_propagate(0)
            self.canvas = Canvas(self.frame1)
            self.frame_keys = Frame(self.canvas)
            self.scrollbar_keys = Scrollbar(self.frame1,
                                            orient="vertical",
                                            command=self.canvas.yview)
            self.canvas.configure(yscrollcommand=self.scrollbar_keys.set)
            self.frame_keys.bind("<Configure>", self.scrolling)
            self.frame_keys.bind_all("<MouseWheel>", self._on_mousewheel)
            self.frame_actions = Frame(self.parent)
            self.AddButton = Button(
                self.frame_actions,
                text='Add key',
                background='#888',
                foreground='#000',
                padx='2',
                pady='0',
                width='10',
                command=lambda: self.add_key(self.frame_keys))
            self.ClearButton = Button(
                self.frame_actions,
                text='Clear keys',
                background='#888',
                foreground='#000',
                padx='2',
                pady='0',
                width='10',
                command=lambda: self.delete_key('all', self.frame_keys))
            self.GetKeyButton = Button(self.frame_actions,
                                       text='Get API key',
                                       background='#888',
                                       foreground='#000',
                                       padx='2',
                                       pady='0',
                                       width='10',
                                       command=lambda: webbrowser.open_new_tab(
                                           'https://tinypng.com/developers'))
            self.SaveButton = Button(
                self.parent,
                text='Save',
                background='#888',
                foreground='#000',
                padx='2',
                pady='0',
                width='10',
                font='arial 12',
                command=lambda: self.parent.settings.save_settings(
                    self.settings, self.parent.init_menu_window))

        def show(self):
            self.frame0.pack(fill='x')
            self.title.pack(fill='x',
                            pady=5,
                            side='left',
                            expand=True,
                            ipady=4)
            self.BackButton.pack(side='left')
            self.frame1.pack(fill='x', ipadx=1)
            self.frame_keys.pack(ipadx=3)
            self.scrollbar_keys.pack(side='right', fill='y')
            self.canvas.pack()
            self.canvas.create_window((0, 0),
                                      window=self.frame_keys,
                                      anchor='nw')
            self.frame_keys.rowconfigure(0, pad=2)
            self.frame_keys.columnconfigure(0, pad=2)
            self.frame_keys.columnconfigure(1, pad=1)
            self.frame_keys.columnconfigure(2, pad=1)
            self.frame_keys.columnconfigure(3, pad=1)
            self.frame_actions.pack(fill='x', pady=10)
            self.AddButton.pack(side='left', padx=4)
            self.ClearButton.pack(side='left', padx=4)
            self.GetKeyButton.pack(side='right', padx=4)
            self.SaveButton.pack(pady=10)
            self.show_keys(self.frame_keys)

        def show_keys(self, target_frame):
            if len(self.settings.keys):
                target_frame.config(background='BLACK')
                Label(target_frame, text='№', width=3).grid(row=0, column=0)
                Label(target_frame, text='API key', width=30).grid(row=0,
                                                                   column=1)
                Label(target_frame, text="Compression count",
                      width=15).grid(row=0, column=2)
                Label(target_frame, text="Action", width=11).grid(row=0,
                                                                  column=3)
                i = 1
                for key in self.settings.keys:
                    target_frame.rowconfigure(i, pad=1)
                    Label(target_frame, text=i, width=3,
                          height=2).grid(row=i, column=0)
                    Label(target_frame, text=key, width=30,
                          height=2).grid(row=i, column=1)
                    Label(target_frame,
                          text=self.settings.keys[key],
                          width=15,
                          height=2).grid(row=i, column=2)
                    button_frame = Frame(target_frame, width=83, height=36)
                    button_frame.pack_propagate(0)
                    button_frame.grid(row=i, column=3)
                    Button(button_frame,
                           text='Edit',
                           background='#888',
                           foreground='#000',
                           width=4,
                           height=1,
                           bd=1,
                           command=lambda arg=key: self.edit_key(
                               arg, target_frame)).pack(pady=5, side='left')
                    Button(button_frame,
                           text='Delete',
                           background='#888',
                           foreground='#000',
                           width=6,
                           height=1,
                           bd=1,
                           command=lambda arg=key: self.delete_key(
                               arg, target_frame)).pack(pady=5, side='left')
                    i += 1
            else:
                target_frame.config(background='')
                Label(target_frame,
                      text='Please add your TinyPNG API key',
                      font='arial 15').pack(fill='x', padx=70, pady=4)
                Button(target_frame,
                       text='Get API key',
                       background='#888',
                       foreground='#000',
                       padx='2',
                       pady='0',
                       width='10',
                       font='arial 15',
                       command=lambda: webbrowser.open_new_tab(
                           'https://tinypng.com/developers')).pack()

        def scrolling(self, event):
            height = event.height
            if height > 150:
                height = 150
            self.canvas.configure(scrollregion=self.canvas.bbox("all"),
                                  width=440,
                                  height=height)

        def _on_mousewheel(self, event):
            self.canvas.yview_scroll(int((-1 * (event.delta / 120))), "units")

        def add_key(self, target_frame=None):
            self.AddEditWindow(self.parent, self.settings)
            if target_frame:
                Window.destroy_elements(target_frame)
                self.show_keys(target_frame)

        def edit_key(self, key, target_frame=None):
            self.AddEditWindow(self.parent, self.settings, key)
            if target_frame:
                Window.destroy_elements(target_frame)
                self.show_keys(target_frame)

        def delete_key(self, key, target_frame=None):
            if key == 'all':
                if messagebox.askyesno(title='Delete?',
                                       message='Delete all keys?'):
                    self.settings.keys.clear()
            else:
                del self.settings.keys[key]
            self.settings.edit_flag = True
            if target_frame:
                Window.destroy_elements(target_frame)
                self.show_keys(target_frame)

        def back(self):
            if self.settings.edit_flag:
                if messagebox.askyesno(title='Exit?',
                                       message='Exit without saving?'):
                    self.parent.init_menu_window()
            else:
                self.parent.init_menu_window()

        class AddEditWindow:
            def __init__(self, root, settings, key=None):
                self.window = Toplevel(root)
                key_val = StringVar()
                self.window.transient(root)
                self.window.grab_set()
                self.window.focus_set()
                if key:
                    button_text = 'Edit'
                    key_val.set(key)
                else:
                    button_text = 'Add'
                self.window.title(button_text +
                                  ' key (Transform Image TinyPNG)')
                key_entry = Entry(self.window, textvariable=key_val, width=50)
                key_entry.pack(pady=5)
                key_entry.focus_set()
                frame = Frame(self.window)
                frame.pack()
                Button(frame,
                       text=button_text,
                       width=10,
                       background='#888',
                       foreground='#000',
                       command=lambda: self.add_or_edit_key(
                           settings, key_val, key)).pack(side='left', padx=5)
                Button(frame,
                       text='Cancel',
                       width=10,
                       background='#888',
                       foreground='#000',
                       command=self.window.destroy).pack(side='left', padx=5)
                Window.center_window(self.window)

                self.window.wait_window()

            def add_or_edit_key(self, settings, key_val, key):
                if tPNG.validate_key(key_val.get()):
                    old_keys = settings.keys
                    new_keys = {}
                    if key:
                        for old_key in old_keys:
                            if old_key == key:
                                new_keys.update({key_val.get(): ''})
                            else:
                                new_keys.update({old_key: old_keys[old_key]})
                        old_keys.clear()
                        old_keys.update(new_keys)
                    else:
                        old_keys.update({key_val.get(): ''})
                    settings.edit_flag = True
                    self.window.destroy()
                else:
                    Window.error_message('invalid_key')