import PySimpleGUI as sg import os sg.ChangeLookAndFeel('BlueMono') #get pathname to current file dirname, filename = os.path.split(os.path.abspath(__file__)) pathname = os.path.join(dirname , 'Names.txt') #Get data from file names = [line.strip() for line in open(pathname)] sorted_names = names[:] sorted_names.sort() tab1_layout =[[sg.Text('Linear Search Demo', font =('Calibri', 14, 'bold'))], [sg.Listbox(values =[n for n in names], size = (15, 12),font = ('Calibri', 12), background_color ='White',key = '_display1_')], [sg.Text('_'*15,font = ('Calibri', 12))], [sg.Text('Enter name to search for:')], [sg.InputText(size = (18,1), key = '_linear_')], [sg.ReadButton('Linear Search', size = (15,1))]] tab2_layout = [[sg.Text('Binary Search Demo', font =('Calibri', 14, 'bold'))], [sg.Listbox(values =[n for n in sorted_names], size = (15, 12),font = ('Calibri', 12), background_color ='White',key = '_display2_')], [sg.Text('_'*18,font = ('Calibri', 12))], [sg.Text('Enter name to search for:')], [sg.InputText(size = (18,1), key = '_binary_')], [sg.ReadButton('Binary Search', size = (15,1))]] layout = [ [sg.TabGroup([[sg.Tab('Linear Search', tab1_layout),sg.Tab('Binary Search', tab2_layout)]])]] window = sg.Window('Main Window').Layout(layout) #Linear Search - no need for Ordered list def linear_search(): l = names[:] found = False for l in l: if l == value['_linear_']: #Check each value found = True result = ['Linear search', l + ' found'] window.FindElement('_display1_').Update(result) break if not found: result = [value['_linear_'], 'was not found'] window.FindElement('_display1_').Update(result) #Binary Search - only works for ordered lists def binary_search(): l = sorted_names lo = 0 hi = len(l)-1 found = False while lo <= hi: mid = (lo + hi) //2 if l[mid] == value['_binary_']: found = True result = ['Binary search', l[mid] + ' found.'] window.FindElement('_display2_').Update(result) break elif l[mid] < value['_binary_']: lo = mid + 1 else: hi = mid - 1 if not found: result = [value['_binary_'], 'was not found'] window.FindElement('_display2_').Update(result) while True: button, value = window.Read() if button is not None: if button == 'Linear Search': linear_search() if button == 'Binary Search': binary_search() else: break