Created
September 15, 2021 19:22
-
-
Save driscollis/c1beeea9d055d238900938354f22b6a9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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() |
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
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:
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")],
]
if name == "main":
main()