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.
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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment