Fixed wasn't returning window when creating popup. Made a main func instead of a flat program structure
This commit is contained in:
parent
fa103b7246
commit
7a7513e00d
|
@ -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()
|
|
||||||
|
|
Loading…
Reference in New Issue