Skip to content

Instantly share code, notes, and snippets.

@driscollis
Created September 15, 2021 19:22
Show Gist options
  • Save driscollis/c1beeea9d055d238900938354f22b6a9 to your computer and use it in GitHub Desktop.
Save driscollis/c1beeea9d055d238900938354f22b6a9 to your computer and use it in GitHub Desktop.
# password_generator_gui.py
import PySimpleGUI as sg
def main():
layout = [
[sg.Text("Password:"), sg.Input(size=(25, 1), key="-PASSWORD-")],
[
sg.Text("Length:"),
sg.Slider(range=(8, 32), key="-SLIDER-", orientation='h'),
sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-SPIN-")
],
[sg.Text("Character Types")],
[
[sg.Checkbox('A-Z', default=True, key="-AZ-"),
sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-SPINA-"),
sg.Spin(list(range(8, 33)), initial_value=32, enable_events=True, key="-SPINZ-")
]
],
[
[sg.Checkbox('a-z', default=True, key="-az-"),
sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-SPIN-LOWA-"),
sg.Spin(list(range(8, 33)), initial_value=32, enable_events=True, key="-SPIN-LOWZ-")
]
],
[
[sg.Checkbox('0-9', default=True, key="-NUMBERS-"),
sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-LOW-NUMBER-"),
sg.Spin(list(range(8, 33)), initial_value=32, enable_events=True, key="-HIGH-NUMBER-")
]
],
[
[sg.Checkbox('*&$', default=True, key="-SPECIAL-"),
sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-SPEC0-"),
sg.Spin(list(range(8, 33)), initial_value=32, enable_events=True, key="-SPEC9-")
]
],
[sg.Button("Generate")],
]
window = sg.Window("Password Generator", layout)
while True:
event, values = window.read()
if event == "Exit" or event == sg.WIN_CLOSED:
break
window.close()
if __name__ == "__main__":
main()
@PySimpleGUI
Copy link

Very nice!

This will sync your slider and spin at the end of the slider. Note they're centered. You could align them like I have here at the bottom:

image

password_generator_gui.py

import PySimpleGUI as sg

def main():
layout = [
[sg.Text("Password:"), sg.Input(size=(25, 1), key="-PASSWORD-")],
[
sg.Text("Length:"),
sg.vbottom(
[sg.Slider(range=(8, 32), key="-SLIDER-", enable_events=True, orientation='h'),
sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-SPIN-")])
],
[sg.Text("Character Types")],
[
[sg.Checkbox('A-Z', default=True, key="-AZ-"),
sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-SPINA-"),
sg.Spin(list(range(8, 33)), initial_value=32, enable_events=True, key="-SPINZ-")
]
],
[
[sg.Checkbox('a-z', default=True, key="-az-"),
sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-SPIN-LOWA-"),
sg.Spin(list(range(8, 33)), initial_value=32, enable_events=True, key="-SPIN-LOWZ-")
]
],
[
[sg.Checkbox('0-9', default=True, key="-NUMBERS-"),
sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-LOW-NUMBER-"),
sg.Spin(list(range(8, 33)), initial_value=32, enable_events=True, key="-HIGH-NUMBER-")
]
],
[
[sg.Checkbox('*&$', default=True, key="-SPECIAL-"),
sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-SPEC0-"),
sg.Spin(list(range(8, 33)), initial_value=32, enable_events=True, key="-SPEC9-")
]
],
[sg.Button("Generate")],
]

window = sg.Window("Password Generator", layout)

while True:
    event, values = window.read()
    print(event, values)
    if event == "Exit" or event == sg.WIN_CLOSED:
        break
    if event == '-SLIDER-':
        window['-SPIN-'].update(values[event])
    elif event == '-SPIN-':
        window['-SLIDER-'].update(values[event])
window.close()

if name == "main":
main()

@PySimpleGUI
Copy link

I tacked on a list comprehension

# password_generator_gui.py

import PySimpleGUI as sg

def sp(low, hi, start, key):
    return sg.Spin(list(range(low, hi)), initial_value=start, enable_events=True, key=key)

def main():
    layout = [
        [sg.Text("Password:"), sg.Input(size=(25, 1), key="-PASSWORD-")],
        [
            sg.Text("Length:"),
            sg.vbottom(
            [sg.Slider(range=(8, 32), key="-SLIDER-", enable_events=True, orientation='h'),
            sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-SPIN-")])
        ],
        [sg.Text("Character Types")],
        [
            [sg.Checkbox('A-Z', default=True, key="-AZ-"),
             sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-SPINA-"),
             sg.Spin(list(range(8, 33)), initial_value=32, enable_events=True, key="-SPINZ-")
             ]
        ],
        [
            [sg.Checkbox('a-z', default=True, key="-az-"),
             sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-SPIN-LOWA-"),
             sg.Spin(list(range(8, 33)), initial_value=32, enable_events=True, key="-SPIN-LOWZ-")
             ]
        ],
        [
            [sg.Checkbox('0-9', default=True, key="-NUMBERS-"),
             sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-LOW-NUMBER-"),
             sg.Spin(list(range(8, 33)), initial_value=32, enable_events=True, key="-HIGH-NUMBER-")
             ]
        ],
        [
            [sg.Checkbox('*&$', default=True, key="-SPECIAL-"),
             sg.Spin(list(range(8, 33)), initial_value=8, enable_events=True, key="-SPEC0-"),
             sg.Spin(list(range(8, 33)), initial_value=32, enable_events=True, key="-SPEC9-")
             ]
        ],
        [sg.Button("Generate")],
    ] + \
    [[sp(8, 33, 8, f'-SPINLOW{i}-'), sp(8, 33, 32, f'-SPINHIGH{i}-')] for i in range(3)]
    
    window = sg.Window("Password Generator", layout)

    while True:
        event, values = window.read()
        print(event, values)
        if event == "Exit" or event == sg.WIN_CLOSED:
            break
        if event == '-SLIDER-':
            window['-SPIN-'].update(values[event])
        elif event == '-SPIN-':
            window['-SLIDER-'].update(values[event])
    window.close()


if __name__ == "__main__":
    main()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment