def create_table(table_container): global single_vector_input global preference_vector if custom_preference_vector is not None: pref_v = custom_preference_vector else: pref_v = random_table() single_vector_input = [] container = table_container.get_container() container.clear() top_size = int(top_offset * 0.6) left_size = int(left_offset * 3.0) vertical_offset = top_offset horizontal_offset = int(left_offset * 3.5) for i in range(n_voters): vector_input = gui.create_input( pygame, ui_manager, size=(left_size, top_size), container=table_container, position=(0, vertical_offset * i), ) single_vector_input.append(vector_input) voter_name_label = gui.create_label( pygame, ui_manager, size=(left_size, top_size), text='Voter ' + str(i + 1), container=table_container, position=(horizontal_offset, vertical_offset * i), ) container.add_element(vector_input) container.add_element(voter_name_label) for j in range(n_preferences): voter_pref = str(pref_v[i][j]) preference_label = gui.create_label( pygame, ui_manager, size=(left_size, top_size), text=voter_pref, container=table_container, position=(horizontal_offset * (j + 2), vertical_offset * i), ) container.add_element(preference_label) table_container.set_scrollable_area_dimensions( (1000, n_voters * vertical_offset))
def init_runtime_ui(): global generate_table_button global execute_voting_conditions_button global voting_schemes_dropdown global voting_strategies_dropdown gui.create_label(pygame, ui_manager, position=(int(left_offset * 1.0), int(top_offset * 12.0)), size=(int(left_offset * 14.0), int(top_offset * 1.0)), text='Runtime') voting_schemes_dropdown = gui.create_dropdown_button( pygame, ui_manager, opt_list=voting_schemes, position=(int(left_offset * 1.0), int(top_offset * 13.5)), size=(int(left_offset * 6.0), int(top_offset * 1.0))) voting_strategies_dropdown = gui.create_dropdown_button( pygame, ui_manager, opt_list=voting_strategies, position=(int(left_offset * 1.0), int(top_offset * 14.5)), size=(int(left_offset * 6.0), int(top_offset * 1.0)), ) voting_strategies_dropdown.selected_option = '' generate_table_button = gui.create_button( pygame, ui_manager, text='Generate voters table', position=(int(left_offset * 9.0), int(top_offset * 13.5)), size=(int(left_offset * 6.0), int(top_offset * 1.0))) execute_voting_conditions_button = gui.create_button( pygame, ui_manager, text='Execute voting conditions', position=(int(left_offset * 9.0), int(top_offset * 14.5)), size=(int(left_offset * 6.0), int(top_offset * 1.0)))
def create_table_ui(): gui.create_label( pygame, ui_manager, position=(int(left_offset * 15.5), int(top_offset * 1.0)), size=(int(left_offset * 3.0), int(top_offset * 1.0)), text='Preference Vector', ) gui.create_label( pygame, ui_manager, position=(int(left_offset * 19.0), int(top_offset * 1.0)), size=(int(left_offset * 3.0), int(top_offset * 1.0)), text='Voter Name', ) gui.create_label( pygame, ui_manager, position=(int(left_offset * 22.5), int(top_offset * 1.0)), size=(int(left_offset * 2.0), int(top_offset * 1.0)), text='Pref...', ) rect = pygame.Rect((int(left_offset * 15.5), int(top_offset * 2.5)), (int(left_offset * 9.0), int(top_offset * 12.0))) table_container = UIScrollingContainer( relative_rect=rect, manager=ui_manager, ) return table_container
def init_settings_ui(): global randomize_n_voters_button global number_votes_input global randomize_n_preferences_button global number_preferences_input global preference_vector_input global save_preference_vector_button global response_label # init n voters ui gui.create_label(pygame, ui_manager, position=(int(left_offset * 1.0), int(top_offset * 2.2)), text='Number of voters', size=(int(left_offset * 4.0), int(top_offset * 1.0))) number_votes_input = gui.create_input(pygame, ui_manager, size=(int(left_offset * 3.0), int(top_offset * 0.6)), position=(int(left_offset * 5.5), int(top_offset * 2.5))) number_votes_input.set_allowed_characters('numbers') number_votes_input.set_text_length_limit(3) number_votes_input.set_text(str(n_voters)) randomize_n_voters_button = gui.create_button( pygame, ui_manager, text='Randomize number of voters', size=(int(left_offset * 6.0), int(top_offset * 1.0)), position=(int(left_offset * 9.0), int(top_offset * 2.2))) # init n preferences ui gui.create_label(pygame, ui_manager, position=(int(left_offset * 1.0), int(top_offset * 3.7)), text='Number of preferences', size=(int(left_offset * 4.0), int(top_offset * 1.0))) number_preferences_input = gui.create_input( pygame, ui_manager, size=(int(left_offset * 3.0), int(top_offset * 0.6)), position=(int(left_offset * 5.5), int(top_offset * 4.0))) number_preferences_input.set_allowed_characters('numbers') number_preferences_input.set_text_length_limit(3) number_preferences_input.set_text(str(n_preferences)) randomize_n_preferences_button = gui.create_button( pygame, ui_manager, text='Randomize number of preferences', size=(int(left_offset * 6.0), int(top_offset * 1.0)), position=(int(left_offset * 9.0), int(top_offset * 3.7))) # init vector initialization gui.create_label( pygame, ui_manager, position=(int(left_offset * 1.0), int(top_offset * 5.2)), text='Preference vector (two dimensional python array [[]])', size=(int(left_offset * 14.0), int(top_offset * 1.0))) preference_vector_input = gui.create_input( pygame, ui_manager, size=(int(left_offset * 7.5), int(top_offset * 0.6)), position=(int(left_offset * 1.0), int(top_offset * 6.7))) save_preference_vector_button = gui.create_button( pygame, ui_manager, text='Save preference vector', size=(int(left_offset * 6.0), int(top_offset * 1.0)), position=(int(left_offset * 9.0), int(top_offset * 6.5))) response_label = gui.create_text_display(pygame, ui_manager, position=(int(left_offset * 1.0), int(top_offset * 8)), size=(int(left_offset * 14.0), int(top_offset * 1.2)))
n_preferences = n number_preferences_input.set_text(str(n_preferences)) if __name__ == "__main__": init_settings() init_pygame() ui_manager = gui.init_ui(screen_size) output_console = gui.create_text_box(pygame, ui_manager, size=output_console_size, position=output_console_position) gui.create_label(pygame, ui_manager, position=(left_offset, int(top_offset * 0.7)), size=(int(left_offset * 14.0), int(top_offset * 1.0)), text='Settings') init_settings_ui() # create buttons for choosing algorithms and running the code init_runtime_ui() table_container = create_table_ui() running = True vector_string = "[[0, 1],[1, 0]]" preference_vector_input.set_text(vector_string) parsed_vector = parse_vector(vector_string) custom_preference_vector = parsed_vector