Fixed wasn't returning window when creating popup. Made a main func instead of a flat program structure

This commit is contained in:
PySimpleGUI 2020-01-22 16:21:46 -05:00
parent fa103b7246
commit 7a7513e00d
1 changed files with 65 additions and 67 deletions

View File

@ -2,20 +2,17 @@ import PySimpleGUI as sg
import re import re
''' '''
Exampel of Input element features. Demo of using a borderless window to show possible matches for autocomplete feature
''' '''
def autocomplete_popup_show(text_list): def autocomplete_popup_show(text_list):
autocomplete_popup_layout = [ layout = [[ sg.Listbox(values=text_list,
[sg.Listbox(values=text_list, size=(15, len(text_list)),
size=(15, len(text_list)), change_submits=True, bind_return_key=True,
change_submits=True, bind_return_key=True, key='-FLOATING-LISTBOX-', enable_events=True) ]]
key='-FLOATING-LISTBOX-', enable_events=True)
]
]
autocomplete_popup = sg.Window("Borderless Window", return sg.Window("Borderless Window",
autocomplete_popup_layout, layout,
default_element_size=(12, 1), default_element_size=(12, 1),
auto_size_text=False, keep_on_top=True, auto_size_text=False, keep_on_top=True,
no_titlebar=True, grab_anywhere=True, no_titlebar=True, grab_anywhere=True,
@ -25,76 +22,77 @@ def autocomplete_popup_show(text_list):
default_button_element_size=(12, 1), default_button_element_size=(12, 1),
location=(1320, 622), finalize=True) location=(1320, 622), finalize=True)
return window
def predict_text(input, lista): def predict_text(input, lista):
pattern = re.compile('.*' + input + '.*') pattern = re.compile('.*' + input + '.*')
return [w for w in lista if re.match(pattern, w)] return [w for w in lista if re.match(pattern, w)]
choices = ['ABC' + str(i) for i in range(30)] # dummy data def main():
layout = [[sg.Text('Your typed chars appear here:')], choices = ['ABC' + str(i) for i in range(30)] # dummy data
[sg.Input(key='-INPUT-', size=(10, 1))],
[sg.Button('Show'), sg.Button('Exit')], ]
window = sg.Window('Window Title', layout, return_keyboard_events=True) layout = [[sg.Text('Your typed chars appear here:')],
[sg.Input(key='-INPUT-', size=(10, 1))],
[sg.Button('Show'), sg.Button('Exit')], ]
sel_item = -1 window = sg.Window('Autocomplete Demo', layout, return_keyboard_events=True)
skip_event = False
while True: # Event Loop
event, values = window.read(timeout=500)
if event in (None, 'Exit'): sel_item = -1
break fwindow = list_elem = values2 = None
while True: # Event Loop
event, values = window.read(timeout=500)
if event != sg.TIMEOUT_KEY: if event in (None, 'Exit'):
# print(f'event1 {event}') break
in_val = values['-INPUT-']
prediction_list = predict_text(str(in_val), choices) if event != sg.TIMEOUT_KEY:
if prediction_list: # print(f'event1 {event}')
try: in_val = values['-INPUT-']
prediction_list = predict_text(str(in_val), choices)
if prediction_list:
try:
fwindow.close()
except:
pass
fwindow = autocomplete_popup_show(prediction_list)
list_elem = fwindow['-FLOATING-LISTBOX-']
if event == '_COMBO_':
sg.popup('Chose', values['_COMBO_'])
if event.startswith('Down') or event.startswith('special 16777237'):
sel_item = sel_item + (sel_item < len(prediction_list))
list_elem.update(set_to_index=sel_item)
elif event.startswith('Up') or event.startswith('special 16777235'):
sel_item = sel_item - (sel_item > 0)
list_elem.update(set_to_index=sel_item)
if event == '\r' or event.startswith('special 16777220'):
chosen = values2['-FLOATING-LISTBOX-'] if values2 is not None else None
if chosen:
window['-INPUT-'].update(chosen[0], select=True)
fwindow.close() fwindow.close()
except: sel_item = -1
pass
fwindow = autocomplete_popup_show(prediction_list)
list_elem = fwindow['-FLOATING-LISTBOX-']
if event == '_COMBO_':
sg.popup('Chose', values['_COMBO_'])
if event.startswith('Down') or event.startswith('special 16777237'): if event.startswith('Escape') or event.startswith('special 16777216'):
sel_item = sel_item + (sel_item < len(prediction_list)) window['-INPUT-'].update('')
list_elem.update(set_to_index=sel_item)
skip_event = True
elif event.startswith('Up') or event.startswith('special 16777235'): try:
sel_item = sel_item - (sel_item > 0) event2, values2 = fwindow.read(timeout=10)
list_elem.update(set_to_index=sel_item) # if event2 == '-FLOATING-LISTBOX-' and skip_event and QT:
skip_event = True # skip_event = False
if event2 != sg.TIMEOUT_KEY and event2 is not None:
# print(f'event2 {event2}')
fwindow.close()
window['-INPUT-'].update(values2['-FLOATING-LISTBOX-']
[0], select=True)
sel_item = -1
fwindow = None
except:
pass
if event == '\r' or event.startswith('special 16777220'): window.close()
chosen = values2['-FLOATING-LISTBOX-']
window['-INPUT-'].update(values2['-FLOATING-LISTBOX-']
[0], select=True)
fwindow.close()
sel_item = -1
if event.startswith('Escape') or event.startswith('special 16777216'): if __name__ == '__main__':
window['-INPUT-'].update('') main()
try:
event2, values2 = fwindow.read(timeout=10)
# if event2 == '-FLOATING-LISTBOX-' and skip_event and QT:
# skip_event = False
if event2 != sg.TIMEOUT_KEY and event2 is not None:
# print(f'event2 {event2}')
fwindow.close()
window['-INPUT-'].update(values2['-FLOATING-LISTBOX-']
[0], select=True)
sel_item = -1
fwindow = None
except:
pass
window.close()