New Demo Program - Wordle GUI

This commit is contained in:
PySimpleGUI 2022-03-05 06:53:01 -05:00
parent 3363fa48c0
commit 58e0b2c82c
1 changed files with 98 additions and 0 deletions

View File

@ -0,0 +1,98 @@
import PySimpleGUI as sg
import copy
"""
Wordle GUI Demo
Enter characters for each position
Press enter or click enter to submit a row
This is a prototype GUI of the front-end for WORDL
It currently:
* Takes input
* Makes sure only characters
* Automatically converts to upper case
* Handles backspace
* Checks for Enter key
* Compares against a word (the constant "answer")
* Color codes the submitted guess
To complete an application, you'll need to:
* Supply a word to guess from list of words
* Check if user's submission is a word (I think this is how WORDLE works)
Copyright 2022 PySimpleGUI
"""
# Insert code to generate a word here
answer = 'WORDS'
def TextChar(value, key):
return sg.Input(value, key=key, font='Courier 22', size=(1,1), disabled_readonly_background_color='gray', border_width=1, p=1, enable_events=True, disabled=True)
def main():
layout = [[sg.Text('Wordle', font='_ 20')],
[[TextChar('', (row, col)) for col in range(5)]for row in range(6)],
[sg.B('Enter', bind_return_key=True)],
[sg.Text('Or press enter', font='_ 10')]]
window = sg.Window("Wordle", layout, finalize=True, element_justification='c')
cur_row, correct = 0, False
[window[(cur_row, col)].update(disabled=False) for col in range(5)]
window.bind('<BackSpace>', '-BACKSPACE-')
while True:
event, values = window.read()
if event == sg.WIN_CLOSED:
break
if isinstance(event, tuple):
if len(values[event]):
row, col = event
char_input = values[event][-1]
if not char_input.isalpha(): # if not a character input, remove the input
window[event].update('')
else:
window[event].update(char_input.upper()[0]) # convert to uppercase
if col < 4:
window[(row, col+1)].set_focus() # Move to next position
elif event == 'Enter' and cur_row < 5:
guess = ''.join([values[(cur_row, j)] for j in range(5)])
answer2 = copy.copy(answer)
for i, letter in enumerate(guess):
if letter == answer2[i]:
window[(cur_row, i)].update(background_color='green', text_color='white')
answer2 = answer2.replace(letter, '*')
elif letter in answer2:
window[(cur_row, i)].update(background_color='#C9B359', text_color='white')
answer2 = answer2.replace(letter, '*')
else:
window[(cur_row, i)].update(background_color='gray', text_color='white')
if guess == answer:
correct = True
break
cur_row += 1 # Move to the next row
[window[(cur_row, col)].update(disabled=False) for col in range(5)] # Enable inputs on next row
window[(cur_row, 0)].set_focus() # Move to first position on row
elif event == 'Enter' and cur_row == 5:
correct = False
break
elif event == '-BACKSPACE-':
current_focus = window.find_element_with_focus()
current_key = current_focus.Key
if isinstance(current_key, tuple):
window[current_key].update('')
if current_key[1] > 0:
window[(current_key[0], current_key[1]-1)].set_focus()
window[(current_key[0], current_key[1]-1)].update('')
if correct:
sg.popup('You win!')
else:
sg.popup(f'Sorry... the answer was {answer}')
window.close()
if __name__ == '__main__':
main()