Skip to content

Instantly share code, notes, and snippets.

@dheepakg
Created May 20, 2018 20:52
Show Gist options
  • Save dheepakg/1b43bb180b54c90362238e86d94e99bd to your computer and use it in GitHub Desktop.
Save dheepakg/1b43bb180b54c90362238e86d94e99bd to your computer and use it in GitHub Desktop.

Revisions

  1. dheepakg created this gist May 20, 2018.
    83 changes: 83 additions & 0 deletions build-3_02.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,83 @@
    from tkinter import *


    class Calculator:

    def __init__(self, master):
    print("test")
    master.title("Random Generator")
    master.geometry("420x210")
    #Top Frame
    self.random_ch = ''
    self.entered_number = 0
    first_frame = Frame(root, bg='gainsboro', width=450, height=50, pady=3)
    first_frame.grid(row=0, sticky="ew")

    self.gen_btn = Button(first_frame, text="Generate", width="8", anchor="w",
    command=lambda: self.update("add"))
    self.gen_btn.grid(row=2, column=1)

    self.input_reset_btn = Button(first_frame, text="Reset", width="6", anchor="w",
    command=lambda: self.update("reset"))
    self.input_reset_btn.grid(row=2, column=2)

    vcmd = (master.register(self.on_validate))
    self.input_box = Entry(first_frame, validate="key", width=3, validatecommand=(vcmd, "%P"))
    self.input_box.grid(row=1, column=1)

    self.input_length = Label(first_frame, text="Enter a number", bg='gainsboro')
    self.input_length.grid(row=1, column=0)

    #Second Frame
    second_frame = Frame(root, width=450, height=50, pady=3)
    second_frame.grid(row=1, sticky="ew")

    self.text_display = Text(second_frame, height=1, width=30)
    self.text_display.grid(row=3, column=0)

    #Third Frame
    third_frame = Frame(root, width=450, bg='gainsboro', height=50, pady=3)
    third_frame.grid(row=2, sticky="ew")

    self.quit_btn = Button(third_frame, text="Quit", width="8", command=lambda root=root:quit(root))
    self.quit_btn.grid(row=1, column=2)

    self.copy_btn = Button(third_frame, text="Copy", width="8", command=lambda root=root:self.copy_to_clipboard())
    self.copy_btn.grid(row=1, column=3)

    def on_validate(self, new_text):
    if not new_text:
    self.entered_number = 0

    try:
    self.entered_number = int(new_text)
    return True
    except ValueError:
    return False

    def update(self, method):
    import random
    import string
    if method == "add":
    self.text_display.delete('1.0', END)
    self.random_ch = ''.join([random.choice(string.ascii_letters + string.digits + string.punctuation)\
    for n in range(self.entered_number)])
    elif method == "reset":

    self.random_ch = ''
    self.text_display.delete('1.0', END)
    self.input_box.delete(0, END)
    else:
    self.random_ch = ''
    self.text_display.insert(END, self.random_ch)

    def copy_to_clipboard(self):
    root.clipboard_clear()
    text = self.random_ch
    root.clipboard_append(text)


    if __name__ == "__main__":
    root = Tk()
    my_gui = Calculator(root)
    root.mainloop()