import random
from tkinter import *

def generate(x, y):
    # x = characters to generate
    # y = generate all uppers, all lowers, anything
    if y == 'Upper':
        start, stop = 65, 91
    elif y == 'Lower':
        start, stop = 97, 123
    else:
        start, stop = 33, 127
    a = []
    while x:
        # for x times, generate a ranmdom number, convert it into
        # a character and add it to list 'a'
        a.append(chr(random.randrange(start, stop)))
        x = x - 1
    # when x is 0, convert the list to a string
    d = ''.join(str(v) for v in a)
    return d

b = 1

while b:

    ans = 0   
    rand = Tk()
    amnt = IntVar()

    rand.wm_attributes('-topmost', 1)
    rand.wm_title("Pwd Gen")

    randtext = Text(rand, width=23, height=1)
    randtext.pack()
    randtext.insert("1.0", "Character Amount:")
    randtext.config(state=DISABLED)

    charamnt = Entry(rand, textvariable=amnt)
    charamnt.pack()
    charamnt.delete(0, END)
    charamnt.insert(0, "10")

    randans = Text(rand, width=23, height=2)
    randans.pack()
    randans.insert("1.0", ans)
    randans.config(state=DISABLED)

    incl = StringVar(rand)
    incl.set("Upper")
    inc = OptionMenu(rand, incl, "Upper", "Lower", "All")
    inc.pack()

    def button():
        genamnt = amnt.get()
        include = incl.get()
        ans = generate(genamnt, include)
        randans.config(state=NORMAL)
        randans.delete("1.0", END)
        randans.insert("1.0", ans)
        randans.config(state=DISABLED)
        return
    
    def randquit():
        global b
        b = 0
        rand.destroy()

    button = Button(rand, text="Generate", command=button)
    button.pack()

    button_quit = Button(rand, text="Quit", command=randquit)
    button_quit.pack()

    mainloop()