예제 #1
0
def init_model(larva_model, collapsibles={}):
    for name, dict, kwargs in zip(['PHYSICS', 'ENERGETICS', 'BODY', 'ODOR'],
                                  [larva_model['sensorimotor_params'], larva_model['energetics_params'],
                                   larva_model['body_params'], larva_model['odor_params']],
                                  [{}, {'toggle': True, 'disabled': True}, {}, {}]):
        collapsibles[name] = CollapsibleDict(name, True, dict=dict, type_dict=None, **kwargs)

    module_conf = []
    for k, v in larva_model['neural_params']['modules'].items():
        dic = larva_model['neural_params'][f'{k}_params']
        if k == 'olfactor':
            # odor_gains=dic['odor_dict']
            dic.pop('odor_dict')
        s = CollapsibleDict(k.upper(), False, dict=dic, dict_name=k.upper(), toggle=v)
        collapsibles.update(s.get_subdicts())
        module_conf.append(s.get_section())
    odor_gain_conf = [sg.Button('ODOR GAINS', **buttonM_kwargs)]
    # odor_gain_conf = [sg.Text('odor gains:', **text_kwargs), sg.Button('Odor gains', **button_kwargs)]
    module_conf.append(odor_gain_conf)
    collapsibles['BRAIN'] = Collapsible('BRAIN', True, module_conf)
    brain_layout = sg.Col([collapsibles['BRAIN'].get_section()])
    non_brain_layout = sg.Col([collapsibles['PHYSICS'].get_section(),
                               collapsibles['BODY'].get_section(),
                               collapsibles['ENERGETICS'].get_section(),
                               collapsibles['ODOR'].get_section()
                               ])

    model_layout = [[brain_layout, non_brain_layout]]

    collapsibles['MODEL'] = Collapsible('MODEL', False, model_layout)
    return collapsibles['MODEL'].get_section()
예제 #2
0
def title_bar(title, text_color, background_color):
    """
    Creates a "row" that can be added to a layout. This row looks like a titlebar
    :param title: The "title" to show in the titlebar
    :type title: str
    :return: A list of elements (i.e. a "row" for a layout)
    :type: List[sg.Element]
    """
    bc = background_color
    tc = text_color

    return [
        sg.Col([[sg.T(title, text_color=tc, background_color=bc)]],
               pad=(0, 0),
               background_color=bc),
        sg.Col([[
            sg.T('_',
                 text_color=tc,
                 background_color=bc,
                 enable_events=True,
                 key='-MINIMIZE-'),
            sg.Text('❎',
                    text_color=tc,
                    background_color=bc,
                    enable_events=True,
                    key='Exit')
        ]],
               element_justification='r',
               key='-TITLEBAR-',
               pad=(0, 0),
               background_color=bc)
    ]
예제 #3
0
    def __init__(self):
        self.UI_col = [
            [sg.Button("Generate points")],
            [sg.Button("Draw baseline")],
            [sg.Button("Plot exp")],
            [sg.Text("c0"),
             sg.Input("N/A", readonly=True, key="-c0-")],
            [sg.Text("c1"),
             sg.Input("N/A", readonly=True, key="-c1-")],
        ]

        self.gradient_desc_col = [[
            sg.Canvas(key="-GRAD_DESC-", size=(500, 400))
        ]]

        self.lin_plot_col = [[sg.Canvas(key="-LINE_PLOT-", size=(500, 400))]]

        self.layout = [[
            sg.Col(self.UI_col),
            sg.VerticalSeparator(),
            sg.Col(self.gradient_desc_col),
            sg.VerticalSeparator(),
            sg.Col(self.lin_plot_col),
        ]]

        self.window = sg.Window("Linear Regression",
                                self.layout,
                                finalize=True)
def make_window():
    """
    Creates the main window
    :return: The main window object
    :rtype: (Window)
    """
    theme = get_theme()
    if not theme:
        theme = sg.OFFICIAL_PYSIMPLEGUI_THEME
    sg.theme(theme)
    # First the window layout...2 columns

    find_tooltip = "Find in file\nEnter a string in box to search for string inside of the files.\nFile list will update with list of files string found inside."
    filter_tooltip = "Filter files\nEnter a string in box to narrow down the list of files.\nFile list will update with list of files with string in filename."
    find_re_tooltip = "Find in file using Regular Expression\nEnter a string in box to search for string inside of the files.\nSearch is performed after clicking the FindRE button."


    left_col = sg.Col([
        [sg.Listbox(values=get_file_list(), select_mode=sg.SELECT_MODE_EXTENDED, size=(50, 20), key='-DEMO LIST-')],
        [sg.Text('Filter:', tooltip=filter_tooltip), sg.Input(size=(25, 1), enable_events=True, key='-FILTER-', tooltip=filter_tooltip),
         sg.T(size=(15,1), k='-FILTER NUMBER-')],
        [sg.Button('Run'), sg.B('Edit'), sg.B('Clear'), sg.B('Open Folder')],
        [sg.Text('Find:', tooltip=find_tooltip), sg.Input(size=(25, 1), enable_events=True, key='-FIND-', tooltip=find_tooltip),
         sg.T(size=(15,1), k='-FIND NUMBER-')],
    ], element_justification='l')

    lef_col_find_re = sg.pin(sg.Col([
        [sg.Text('Find:', tooltip=find_re_tooltip), sg.Input(size=(25, 1),key='-FIND RE-', tooltip=find_re_tooltip),sg.B('Find RE')]], k='-RE COL-'))

    right_col = [
        [sg.Multiline(size=(70, 21), write_only=True, key=ML_KEY, reroute_stdout=True, echo_stdout_stderr=True)],
        [sg.Button('Edit Me (this program)'), sg.B('Settings'), sg.Button('Exit')],
        [sg.T('PySimpleGUI ver ' + sg.version.split(' ')[0] + '  tkinter ver ' + sg.tclversion_detailed, font='Default 8', pad=(0,0))],
    ]

    options_at_bottom = sg.pin(sg.Column([[sg.CB('Verbose', enable_events=True, k='-VERBOSE-'),
                         sg.CB('Show only first match in file', default=True, enable_events=True, k='-FIRST MATCH ONLY-'),
                         sg.CB('Find ignore case', default=True, enable_events=True, k='-IGNORE CASE-')]],
                                         pad=(0,0), k='-OPTIONS BOTTOM-'))

    choose_folder_at_top = sg.pin(sg.Column([[sg.T('Click settings to set top of your tree or choose a previously chosen folder'),
                                       sg.Combo(sorted(sg.user_settings_get_entry('-folder names-', [])), default_value=sg.user_settings_get_entry('-demos folder-', ''), size=(50, 1), key='-FOLDERNAME-', enable_events=True, readonly=True)]], pad=(0,0), k='-FOLDER CHOOSE-'))
    # ----- Full layout -----

    layout = [[sg.Text('PySimpleGUI Demo Program & Project Browser', font='Any 20')],
              [choose_folder_at_top],
              sg.vtop([sg.Column([[left_col],[ lef_col_find_re]], element_justification='l'), sg.Col(right_col, element_justification='c') ]),
              [options_at_bottom]
              ]

    # --------------------------------- Create Window ---------------------------------
    window = sg.Window('PSG Demo & Project Browser', layout, finalize=True, icon=icon)

    if not advanced_mode():
        window['-FOLDER CHOOSE-'].update(visible=False)
        window['-RE COL-'].update(visible=False)
        window['-OPTIONS BOTTOM-'].update(visible=False)

    sg.cprint_set_output_destination(window, ML_KEY)
    return window
예제 #5
0
def build_batch_tab(collapsibles):
    batch = copy.deepcopy(test_batch)
    space_search = batch['space_search']
    l_exp = [sg.Col([
        named_list_layout(text='Batch:', key='BATCH_CONF', choices=list(loadConfDict('Batch').keys())),
        [sg.Button('Load', key='LOAD_BATCH', **button_kwargs),
         sg.Button('Save', key='SAVE_BATCH', **button_kwargs),
         sg.Button('Delete', key='DELETE_BATCH', **button_kwargs),
         sg.Button('Run', key='RUN_BATCH', **button_kwargs)]
    ])]
    batch_conf = [[sg.Text('Batch id:', **text_kwargs), sg.In('unnamed_batch_0', key='batch_id', **text_kwargs)],
                  [sg.Text('Path:', **text_kwargs), sg.In('unnamed_batch', key='batch_path', **text_kwargs)],
                  # [sg.Text('Duration (min):', **text_kwargs), sg.In(3, key='batch_dur', **text_kwargs)],
                  # [sg.Text('Timestep (sec):', **text_kwargs), sg.In(0.1, key='dt', **text_kwargs)],
                  # collapsibles['OUTPUT'].get_section()
                  ]

    collapsibles['BATCH_CONFIGURATION'] = Collapsible('BATCH_CONFIGURATION', True, batch_conf)
    l_conf = collapsibles['BATCH_CONFIGURATION'].get_section()
    l_batch0 = [[sg.Col([l_exp,
                         l_conf,
                         [sg.Button('SPACE_SEARCH', **buttonM_kwargs)]])]]
    l_batch1 = [init_batch(batch, collapsibles)]
    l_batch = [[sg.Col(l_batch0), sg.Col(l_batch1)]]
    return l_batch, collapsibles, space_search
예제 #6
0
def createLayout(left_column, right_column):
    layout = [
        [sg.Col(left_column,size=(300, 200), scrollable=True, vertical_scroll_only=True), 
         sg.Col(right_column)]
    ]

    return layout
예제 #7
0
def title_bar(title):
    """
    Creates a "row" that can be added to a layout. This row looks like a titlebar
    :param title: The "title" to show in the titlebar
    :type title: str
    :return: A list of elements (i.e. a "row" for a layout)
    :type: List[sg.Element]
    """
    bg = sg.theme_input_background_color()

    return [
        sg.Col([[sg.T(title, background_color=bg)]],
               pad=(0, 0),
               background_color=bg),
        sg.Col([[
            sg.T(
                '_', background_color=bg, enable_events=True,
                key='-MINIMIZE-'),
            sg.Text('❎', background_color=bg, enable_events=True, key='Exit')
        ]],
               element_justification='r',
               k='-C-',
               pad=(0, 0),
               background_color=bg)
    ]
예제 #8
0
    def player_war_window(data: Dict, best_32: List[int],
                          stats: Dict) -> sg.Window:
        """Player war window.

        Args:
            data (Dict): Dictionary with player information.
            best_32 (List): List with best 32 stats levels.
            stats (Dict): Dictionary with war stats.
        """
        winrate = RoyaleApi.get_winrate(data["losses"], data["wins"]) / 100.0
        base_fp = sum(best_32)
        est_fp = int(winrate * (2 * base_fp) + (1 - winrate) * base_fp)
        decks = [
            [sg.T(f"Average level: {st.mean(best_32):.2f}")],
            [sg.T(f"Minimum daily WP: {base_fp}")],
            [sg.T(f"Maximum daily WP: {2 * base_fp}")],
            [sg.T(f"Estimated daily WP: {est_fp}")],
            [sg.HSep()],
            [sg.T(f"Minimum war WP: {7 * base_fp}")],
            [sg.T(f"Maximum war WP: {14 * base_fp}")],
            [sg.T(f"Estimated war WP: {7 * est_fp}")],
        ]
        war_stats = [
            [sg.T(f"Total WP: {sum(stats['war_points']):.0f}")],
            [sg.T(f" \u21B3 FP: {sum(stats['fame_points']):.0f}")],
            [sg.T(f" \u21B3 RP: {sum(stats['repair_points']):.0f}")],
            [
                sg.
                T(f"Average WP: {sum(stats['war_points']) / len(stats['war_points'])}"
                  )
            ],
        ]
        current_war = [
            [sg.T(f"Current WP: {stats['current_war_points']}")],
            [sg.T(f" \u21B3 FP: {stats['current_fame_points']}")],
            [sg.T(f" \u21B3 RP: {stats['current_repair_points']}")],
        ]
        h = "WP: War Points\nFP: Fame Points\nRP: Repair Points"
        layout = [
            [
                sg.Col([
                    [
                        cw.F("Best 32 cards", decks),
                        sg.Col([
                            [cw.F("War stats", war_stats)],
                            [cw.F("Current war", current_war)],
                        ]),
                    ],
                ])
            ],
            [sg.B("\u2190"), sg.HSep(),
             sg.T("[?]", tooltip=h)],
        ]

        return sg.Window(TITLE, layout)
예제 #9
0
def build_analysis_tab():
    fig, save_to, save_as, figure_agg = None, '', '', None
    func, func_kwargs = None, {}
    data = {}
    data_list = [
        [sg.Text('DATASETS', **header_kwargs)],
        [sg.Listbox(values=[], change_submits=False, size=(20, len(data.keys())), key='DATASET_IDS',
                    enable_events=True)],
        [sg.FolderBrowse(button_text='Add', initial_folder=SingleRunFolder, key='DATASET_DIR', change_submits=True,
                         enable_events=True, **button_kwargs)],
        [sg.Button('Remove', **button_kwargs), sg.Button('Add ref', **button_kwargs),
         sg.Button('Change ID', **button_kwargs)],
        # [sg.Text(' ' * 12)]
    ]

    dim = 2000
    figure_w, figure_h = dim, dim
    graph_dict = {
        'crawl_pars': plot_crawl_pars,
        'angular_pars': plot_ang_pars,
        'endpoint_params': plot_endpoint_params,
        'stride_Dbend': plot_stride_Dbend,
        'stride_Dorient': plot_stride_Dorient,
        'interference': plot_interference,
        'dispersion': plot_dispersion,
        'stridesNpauses': plot_stridesNpauses,
        'turn_duration': plot_turn_duration,
        'turns': plot_turns,
        'odor_concentration': plot_odor_concentration,
        'sensed_odor_concentration': plot_sensed_odor_concentration,
        'pathlength': plot_pathlength,
        'food_amount': plot_food_amount,
        'gut': plot_gut,
        'barplot': barplot,
        'deb': plot_debs,
    }
    graph_list = [
        [sg.Text('GRAPHS', **header_kwargs)],
        [sg.Listbox(values=list(graph_dict), change_submits=True, size=(20, len(list(graph_dict))), key='GRAPH_LIST')],
        [sg.Button('Graph args', **button_kwargs), sg.Button('Draw', **button_kwargs),
         sg.Button('Save', **button_kwargs)]]

    graph_code = sg.Col([[sg.MLine(size=(70, 30), key='GRAPH_CODE')]])
    graph_canvas = sg.Col([[sg.Canvas(size=(figure_w, figure_h), key='GRAPH_CANVAS')]])
    graph_instructions = sg.Col([[sg.Pane([graph_canvas, graph_code], size=(figure_w, figure_h))],
                                 [sg.Text('Grab square above and slide upwards to view source code for graph')]])

    analysis_layout = [
        [sg.Col(data_list)],
        [sg.Col(graph_list), graph_instructions]
    ]
    return analysis_layout, graph_dict, data, func, func_kwargs, fig, save_to, save_as, figure_agg
예제 #10
0
def create_img_win():
    img_col_l = [[sg.Text('Share A')], [sg.Image(key='-SHARE_A-')],
                 [sg.Text('Share B')], [sg.Image(key='-SHARE_B-')]]

    img_col_r = [[sg.Text('Share A+B'), sg.Image(key='-SHARE_AB-')]]

    img_layout = [
        [sg.Col(img_col_l),
         sg.VerticalSeparator(),
         sg.Col(img_col_r)],
        [sg.HorizontalSeparator(pad=None)],
    ]
    win = sg.Window('Images', img_layout)
    return win
예제 #11
0
    def get_boss(self, raid_name):
        column = []
        saved_key = []
        id_zone = zone_info[raid_name]
        raid = self.Zones[id_zone - 3]['encounters']
        for encounter in raid:
            raid_info[encounter['name']] = encounter['id']
            column.append([sg.CB(encounter['name'])])
            boss_list.append(encounter['name'])

        layout = [[sg.Text('Choose a boss')], [sg.Col(column)],
                  [sg.Button('Select'), sg.Exit()]]

        window = sg.Window('All bosses', layout)

        while True:
            event, values = window.Read()
            if event is None or event == 'Exit':
                break
            elif event == 'Select':
                for key in values:
                    if values[key]:
                        saved_key = key
            break
        window.Close()
        print(boss_list[saved_key])
        return boss_list[saved_key]
예제 #12
0
    def get_zone(self):
        column = []
        saved_key = []
        for zone in self.Zones:
            zone_info[zone['name']] = zone['id']
            zone_list.append(zone['name'])
            column.append([sg.CB(zone['name'])])

        layout = [[sg.Text('Choose a zone')], [sg.Col(column)],
                  [sg.Button('Select'), sg.Exit()]]

        window = sg.Window('All zones', layout)

        while True:
            event, values = window.Read()
            if event is None or event == 'Exit':
                break
            elif event == 'Select':
                for key in values:
                    if values[key]:
                        saved_key = key
            break

        window.Close()
        print(zone_list[saved_key])
        return zone_list[saved_key]
def create_window():
    """
    Defines the window's layout and creates the window object.
    This function is used so that the window's theme can be changed and the window "re-started".

    :return: The Window object
    :rtype: sg.Window
    """

    left_col = [[sg.T('Figures to Draw')],
                [
                    sg.Listbox(list(dictionary_of_figures),
                               default_values=[list(dictionary_of_figures)[0]],
                               size=(15, 5),
                               key='-LB-')
                ], [sg.T('Matplotlib Styles')],
                [sg.Combo(plt.style.available, size=(15, 10), key='-STYLE-')],
                [sg.T('PySimpleGUI Themes')],
                [
                    sg.Combo(sg.theme_list(),
                             default_value=sg.theme(),
                             size=(15, 10),
                             key='-THEME-')
                ]]

    layout = [[sg.T('Matplotlib Example', font='Any 20')],
              [sg.Col(left_col), sg.Image(key='-IMAGE-')],
              [sg.B('Draw'), sg.B('Exit')]]

    window = sg.Window('Matplotlib Embedded Template', layout, finalize=True)

    return window
예제 #14
0
def main_window():
    layout = \
    [
        # text title
        [sg.Text('wikipedia', justification='center', font=('Helvetica', '16'))],
        # Multiline the Output details
        [sg.ML("", size=(40, 100), key='-text_ml1-', disabled=False), sg.Col(
            [
                # Label
                [sg.Text('Search', background_color=sg.DEFAULT_BACKGROUND_COLOR, size=(10, 1))],
                # Input for search
                [sg.In(key="-input1-", text_color="grey20")],
                # Button Submit and exit
                [sg.Submit('OK'), sg.Exit()],
                # List Boxs for ==> like Did you mean these are wholesale
                [sg.Listbox([], size=(20, 50), key='-listbox1-', no_scrollbar=True)]
            ]
        )],
    ]
    # window main
    window = sg.Window('wikipedia',
                       layout=layout,
                       font=('Helvetica', '13'),
                       size=(700, 700))
    return window
예제 #15
0
def layoutBuilder(newGrid, meshInput):
    gridFrame = gridBuilder(newGrid)
    col1 = [[sg.Text('1. Enter mesh')],
            [
                sg.Multiline(meshInput,
                             size=(60, 40),
                             key='-IN-',
                             enter_submits=True)
            ], [sg.Button('Submit')]]
    col2 = [[sg.Text('2. Edit mesh')], [sg.Frame('', gridFrame, key='-GRID-')],
            [sg.Button('Export')]]
    col3 = [[sg.Text('Output commands', size=(60, 1))],
            [sg.Multiline('', size=(60, 40), key='-OUT-', do_not_clear=True)]]
    layout = [[sg.Col(col1), sg.Col(col2), sg.Col(col3)]]

    return layout
def package_row(item_num, tracking_num=''):
    carrier_list = ('FedEx', 'USPS')
    tracking_numbers = sg.user_settings_get_entry('-packages-', [])
    row = [
        sg.pin(
            sg.Col(
                [[
                    sg.B(sg.SYMBOL_X,
                         border_width=0,
                         button_color=(sg.theme_text_color(),
                                       sg.theme_background_color()),
                         k=('-DEL-', item_num),
                         tooltip='Delete this item'),
                    sg.Combo(tracking_numbers,
                             default_value=tracking_num,
                             size=(20, 1),
                             key=('-ID-', item_num)),
                    sg.In(size=(20, 1), k=('-DESC-', item_num)),
                    # sg.Input(default_text=tracking_num, s=(20,1), key=('-ID-', item_num), tooltip='Enter your package ID'),
                    sg.Combo(carrier_list,
                             default_value=carrier_list[0],
                             readonly=True,
                             s=(10, 10),
                             k=('-CARRIER-', item_num),
                             tooltip='Not implemented'),
                    sg.T(size=(15, 1), k=('-STATUS-', item_num))
                ]],
                k=('-ROW-', item_num)))
    ]
    return row
def title_bar(title, text_color, background_color):
    """
    Creates a "row" that can be added to a layout. This row looks like a titlebar
    :param title: The "title" to show in the titlebar
    :type title: str
    :param text_color: Text color for titlebar
    :type text_color: str
    :param background_color: Background color for titlebar
    :type background_color: str
    :return: A list of elements (i.e. a "row" for a layout)
    :rtype: List[sg.Element]
    """
    bc = background_color
    tc = text_color
    font = 'Helvetica 12'

    return [
        sg.Col([[
            sg.T(title,
                 text_color=tc,
                 background_color=bc,
                 font=font,
                 grab=True)
        ]],
               pad=(0, 0),
               background_color=bc),
        sg.Col([[
            sg.T('_',
                 text_color=tc,
                 background_color=bc,
                 enable_events=True,
                 font=font,
                 key='-MINIMIZE-'),
            sg.Text('❎',
                    text_color=tc,
                    background_color=bc,
                    font=font,
                    enable_events=True,
                    key='Exit')
        ]],
               element_justification='r',
               key='-C-',
               expand_x=True,
               grab=True,
               pad=(0, 0),
               background_color=bc)
    ]
예제 #18
0
def ZhuMain():
    fig_dict = {
        '进度条1': Pb1,
        '进度条2': Pb2,
        '进度条3': Pb3,
        '进度条4': Pb4,
        '进度条5': Pb5,
        '进度条6': Pb6,
        '进度条7': Pb7,
        '进度条8': Pb8,
        '进度条9': Pb9,
        '进度条10': Pb10,
        '进度条11': Pb11,
        '进度条12': Pb12,
        '进度条13': Pb13
    }

    sg.theme('LightGreen')  #主题背景设计,默认银河灰

    # define the form layout
    listbox_values = list(fig_dict)

    col_listbox = [[
        sg.Listbox(values=listbox_values,
                   enable_events=True,
                   size=(28, len(listbox_values)),
                   key='-LISTBOX-')
    ], [sg.Text('★' * 15)], [sg.Exit(size=(5, 2))]]

    #布局
    layout = [
        [sg.Text('最全进度条及代码整理', font=('current 10'))],
        [
            sg.Col(col_listbox, pad=(5, (3, 330))),
            sg.MLine(size=(50, 30), pad=(5, (3, 90)), key='-MULTILINE-')
        ],  #第2行有3个布局
    ]

    # create the form and show it without the plot
    window = sg.Window('Python3下的最全的进度条整理',
                       layout,
                       grab_anywhere=False,
                       finalize=True)

    # The GUI Event Loop
    while True:
        event, values = window.read()
        # helps greatly when debugging
        if event in (None,
                     'Exit'):  # if user closed window or clicked Exit button
            break

        choice = values['-LISTBOX-'][
            0]  # get first listbox item chosen (returned as a list)
        func = fig_dict[choice]  # get function to call from the dictionary
        window['-MULTILINE-'].update(inspect.getsource(
            func))  # show source code to function in multiline

    window.close()
예제 #19
0
def FieldColumn(name, key, value=''):
    """Generate a column that contains two text fields - label and value
    """
    layout = [[
        sg.Text(name, size=(10, 1)),
        sg.Text(value if value is not None else '', size=(18, 1), key=key)
    ]]
    return sg.Col(layout, pad=(0, 0))
예제 #20
0
 def GraphColumn(name, key):
     layout = [
         [sg.Text(name, size=(18,1), font=('Helvetica 8'), key=key+'TXT_')],
         [sg.Graph((GRAPH_WIDTH, GRAPH_HEIGHT),
                   (0, 0),
                   (GRAPH_WIDTH, 100),
                   background_color='black',
                   key=key+'GRAPH_')]]
     return sg.Col(layout, pad=(2, 2))
def title_bar(title, text_color, background_color):
    """
    Creates a Column element meant to be used as a single row. This row looks like a titlebar.
    :param title: The "title" to show in the titlebar
    :type title: str
    :return: A single Column element that can be used as a single row in your layout
    :type: sg.Column
    """
    bc = background_color
    tc = text_color

    return sg.Col([[
        sg.Col([[
            sg.T(title,
                 text_color=tc,
                 background_color=bc,
                 grab=True,
                 expand_x=True)
        ]],
               pad=(0, 0),
               background_color=bc,
               expand_x=True),
        sg.Col([[
            sg.T('_',
                 text_color=tc,
                 background_color=bc,
                 enable_events=True,
                 key='-MINIMIZE-'),
            sg.Text('❎',
                    text_color=tc,
                    background_color=bc,
                    enable_events=True,
                    key='Exit')
        ]],
               element_justification='r',
               key='-C-',
               pad=(0, 0),
               expand_x=True,
               background_color=bc,
               grab=True)
    ]],
                  pad=(0, 0),
                  grab=True,
                  expand_x=True)
예제 #22
0
def main(program, customer):
    arr = []
    index = 1
    for c in strings:
        if c.startswith('HEADER '):
            c = c.replace('HEADER ', '')
            arr += [[
                Gui.Text(c,
                         size=(66, int(len(c) / header_max_symbols)),
                         justification='center',
                         font=("Helvetica", 18),
                         relief=Gui.RELIEF_RIDGE)
            ], [Gui.Text('-' * 230)]]
        else:
            c = c.replace('\\n', '\n')
            height = int(len(c) / text_max_symbols)
            height += int(c.count('\n') / 5)
            arr += [[
                Gui.Text(c, size=(100, height), key=f"RADIO{index}-text"),
                Gui.VerticalSeparator(),
                Gui.Radio('да',
                          f"RADIO{index}",
                          key=f"RADIO{index}-yes",
                          enable_events=True),
                Gui.Radio('нет',
                          f"RADIO{index}",
                          key=f"RADIO{index}-no",
                          enable_events=True)
            ], [Gui.Text('-' * 230)]]
            index += 1

    layout = [[
        Gui.Col(arr,
                size=(950, 780),
                scrollable=True,
                vertical_scroll_only=True)
    ], [Gui.Submit(button_text='Результат', key='Result')],
              [Gui.Submit(button_text='Назад')]]
    window = Gui.Window('Документы обязательные для предоставления',
                        layout,
                        grab_anywhere=False,
                        element_justification='c').Finalize()

    while True:
        event, values = window.read(timeout=100)
        if event in (None, 'Exit', 'Cancel', 'Закрыть'):
            return 0
        elif 'RADIO' in str(event):
            res = event.replace('RADIO', '').split('-')
            if res[1] == 'yes':
                window[f"RADIO{res[0]}-text"].update(text_color='#37ff5a')
            else:
                window[f"RADIO{res[0]}-text"].update(text_color='#ff4f4f')
        elif event == 'Назад':
            window.close()
            break
예제 #23
0
    def __init__(self, agent, par_shorts=[], available_pars=[]):

        self.agent = agent
        self.available_pars = available_pars
        self.par_shorts = par_shorts
        self.dt = self.agent.model.dt
        self.init_dur = 20
        self.window_size = (1550, 1200)
        self.canvas_size = (self.window_size[0] - 50, self.window_size[1] - 50)
        self.my_dpi = 96
        self.figsize = (int(self.canvas_size[0] / self.my_dpi),
                        int(self.canvas_size[1] / self.my_dpi))

        Ncols = 4
        par_lists = [
            list(a) for a in np.array_split(self.available_pars, Ncols)
        ]
        par_layout = [[sg.Text('Choose parameters')],
                      [
                          sg.Col([
                              *[[sg.CB(p, key=f'k_{p}')] for p in par_lists[i]]
                          ]) for i in range(Ncols)
                      ],
                      [
                          sg.Button('Ok', **button_kwargs),
                          sg.Button('Cancel', **button_kwargs)
                      ]]

        graph_layout = [
            # [sg.Text(f'{self.agent.unique_id} : {self.par}', size=(40, 1), justification='center', font='Helvetica 20')],
            [sg.Canvas(size=(1280, 1200), key='-CANVAS-')],
            [sg.Text('Time in seconds to display on screen')],
            [
                sg.Slider(range=(0.1, 60),
                          default_value=self.init_dur,
                          size=(40, 10),
                          orientation='h',
                          key='-SLIDER-TIME-')
            ],
            [sg.Button('Choose', **button_kwargs)]
        ]
        layout = [[
            sg.Column(par_layout, key='-COL1-'),
            sg.Column(graph_layout, visible=False, key='-COL2-')
        ]]
        self.window = sg.Window(f'{self.agent.unique_id} Dynamic Graph',
                                layout,
                                finalize=True,
                                location=(0, 0),
                                size=self.window_size)
        self.canvas_elem = self.window.FindElement('-CANVAS-')
        self.canvas = self.canvas_elem.TKCanvas
        self.fig_agg = None

        self.update_pars()
        self.layout = 1
예제 #24
0
def build_model_tab(collapsibles):
    larva_model = copy.deepcopy(test_larva)
    odor_gains = larva_model['neural_params']['olfactor_params']['odor_dict']
    module_dict = larva_model['neural_params']['modules']
    module_keys = list(module_dict.keys())

    l_mod0 = [sg.Col([
        [sg.Text('Larva model:', **header_kwargs),
         sg.Combo(list(loadConfDict('Model').keys()), key='MODEL_CONF', enable_events=True, readonly=True,
                  **text_kwargs)],
        [sg.Button('Load', key='LOAD_MODEL', **button_kwargs),
         sg.Button('Save', key='SAVE_MODEL', **button_kwargs),
         sg.Button('Delete', key='DELETE_MODEL', **button_kwargs)]
    ])]

    l_mod1 = init_model(larva_model, collapsibles)

    l_mod = [[sg.Col([l_mod0, l_mod1])]]
    return l_mod, collapsibles, module_keys, odor_gains
예제 #25
0
파일: py.py 프로젝트: Polydynamical/cpuzpy
def main():

    sg.theme('Dark Blue 3')

    col = [[sg.R('Move Stuff', 1, True, key='-MOVE-', enable_events=True)]]

    layout = [
        [
            sg.Graph(
                canvas_size=(400, 400),
                graph_bottom_left=(0, 0),
                graph_top_right=(400, 400),
                key="-GRAPH-",
                change_submits=True,  # mouse click events
                background_color='lightblue',
                drag_submits=True),
            sg.Col(col)
        ],
        [sg.Text(key='info', size=(60, 1))]
    ]

    window = sg.Window("Drawing and Moving Stuff Around",
                       layout,
                       finalize=True)

    # get the graph element for ease of use later
    graph = window["-GRAPH-"]  # type: sg.Graph
    graph.draw_image(data=logo200, location=(0, 400))

    dragging = False
    start_point = end_point = prior_rect = None
    graph.bind('<Button-3>', '+RIGHT+')
    while True:
        event, values = window.read()
        if event is None:
            break  # exiti

        if event == "-GRAPH-":  # if there's a "Graph" event, then it's a mouse
            x, y = values["-GRAPH-"]
            if not dragging:
                start_point = (x, y)
                dragging = True
                drag_figures = graph.get_figures_at_location((x, y))
                lastxy = x, y
            else:
                end_point = (x, y)
            if prior_rect:
                graph.delete_figure(prior_rect)
            delta_x, delta_y = x - lastxy[0], y - lastxy[1]
            lastxy = x, y
            if None not in (start_point, end_point):
                if values['-MOVE-']:
                    for fig in drag_figures:
                        graph.move_figure(fig, delta_x, delta_y)
                        graph.update()
예제 #26
0
    def __get__main_win(self):
        """ Devuelve el layout general para crear la interfaz """
        data = self.__get_tasks()
        col1 = [
            [sg.Text('Mis tareas')],
            [
                sg.Table(values=data,
                         key='-TABLE-',
                         auto_size_columns=False,
                         col_widths=self.HEADINGS_WIDTHS,
                         headings=self.HEADINGS,
                         num_rows=10,
                         pad=(20, 20),
                         row_height=30)
            ],
        ]

        col2 = [[sg.Button('Nueva tarea')], [sg.Exit('Salir')]]
        layout = [[sg.Col(col1, ), sg.Col(col2)]]
        return sg.Window('UnizarTasks', layout, font=self.FONT)
예제 #27
0
def main():
    with open(CHECKLIST_FILE, 'r+', encoding='utf-8') as t:
        checklist_file = t.read().strip()
        checklist = checklist_file[1:-1].split('\'\n\'')
        arr = []
        index = 1
        for c in checklist:
            if c.startswith('HEADER '):
                c = c.replace('HEADER ', '')
                arr += [[
                    Gui.Text(c,
                             size=(66, int(len(c) / header_max_symbols)),
                             justification='center',
                             font=("Helvetica", 18),
                             relief=Gui.RELIEF_RIDGE)
                ], [Gui.Text('-' * 230)]]
            else:
                c = c.replace('\\n', '\n')
                height = int(len(c) / text_max_symbols)
                height += int(c.count('\n') / 5)
                arr += [[
                    Gui.Text(c, size=(100, height), key=f"RADIO{index}-text"),
                    Gui.VerticalSeparator(),
                    Gui.Radio('да',
                              f"RADIO{index}",
                              key=f"RADIO{index}-yes",
                              enable_events=True),
                    Gui.Radio('нет',
                              f"RADIO{index}",
                              key=f"RADIO{index}-no",
                              enable_events=True)
                ], [Gui.Text('-' * 230)]]
                index += 1

    layout = [[Gui.Col(arr, size=(950, 950), scrollable=True)],
              [
                  Gui.Text('', size=(50, 1)),
                  Gui.Submit(button_text='Результат', key='Result'),
                  Gui.Submit(button_text='Закрыть', key='Cancel')
              ]]
    window = Gui.Window('Документы обязательные для предоставления',
                        layout,
                        grab_anywhere=False).Finalize()

    while True:
        event, values = window.read(timeout=100)
        if event in (None, 'Exit', 'Cancel', 'Закрыть'):
            return 0
        elif 'RADIO' in str(event):
            res = event.replace('RADIO', '').split('-')
            if res[1] == 'yes':
                window[f"RADIO{res[0]}-text"].update(text_color='#37ff5a')
            else:
                window[f"RADIO{res[0]}-text"].update(text_color='#ff4f4f')
def make_window(location):
    location = sg.user_settings_get_entry('-location-', location)
    alpha = sg.user_settings_get_entry('-alpha-', 0.9)

    layout = [[sg.Text('FedEx Package Tracking', font='_ 15')],
              [sg.Col([package_row(0)], k='-TRACKING SECTION-')],
              [sg.pin(sg.Text(
                  size=(35, 1),
                  font='_ 8',
                  k='-REFRESHED-',
              ))],
              [
                  sg.T(sg.SYMBOL_X,
                       enable_events=True,
                       k='Exit',
                       tooltip='Exit Application'),
                  sg.T('↻',
                       enable_events=True,
                       k='Refresh',
                       tooltip='Save Changes & Refresh'),
                  sg.T('+',
                       enable_events=True,
                       k='Add Package',
                       tooltip='Add Another Package')
              ]]

    right_click_menu = [[''],
                        [
                            'Add Package',
                            'Edit Me',
                            'Change Theme',
                            'Save Location',
                            'Refresh',
                            'Alpha',
                            [str(x) for x in range(1, 11)],
                            'Exit',
                        ]]

    window = sg.Window('Window Title',
                       layout,
                       finalize=True,
                       no_titlebar=True,
                       grab_anywhere=True,
                       keep_on_top=True,
                       right_click_menu=right_click_menu,
                       alpha_channel=alpha,
                       location=location,
                       use_default_focus=False,
                       font='_ 15',
                       metadata=0)
    add_packages_to_window(window)

    return window
예제 #29
0
def main(data):
    arr = []
    radios = {}
    index = 1
    for c, perm, maybe in eda_docs:
        if c.startswith('HEADER '):
            c = c.replace('HEADER ', '')
            arr += [
                [Gui.Text(c, size=(66, int(len(c) / header_max_symbols)), justification='center',
                          font=("Helvetica", 18), relief=Gui.RELIEF_RIDGE)],
                [Gui.Text('-' * 230)]
            ]
        elif data['type'] in perm:
            c = c.replace('\\n', '\n')
            height = int(len(c) / text_max_symbols)
            height += int(c.count('\n') / 5)
            arr += [
                [Gui.Text(c, size=(100, height), key=f"RADIO{index}-text"), Gui.VerticalSeparator(),
                 Gui.Radio('да', f"RADIO{index}", key=f"RADIO{index}-yes", enable_events=True),
                 Gui.Radio('нет', f"RADIO{index}", key=f"RADIO{index}-{'maybe' if maybe else 'no'}", enable_events=True)],
                [Gui.Text('-' * 230)]
            ]
            radios[str(index)] = c
            index += 1

    layout = [
        [Gui.Col(arr, size=(950, 780), scrollable=True, vertical_scroll_only=True)],
        [Gui.Submit(button_text='Далее'), Gui.Submit(button_text='Назад')]
    ]
    window = Gui.Window('Документы обязательные для предоставления', layout, grab_anywhere=False,
                        element_justification='c').Finalize()

    while True:
        event, values = window.read(timeout=100)
        if event in (None, 'Exit', 'Cancel', 'Закрыть'):
            return 0
        elif 'RADIO' in str(event):
            res = event.replace('RADIO', '').split('-')
            if res[1] == 'yes':
                window[f"RADIO{res[0]}-text"].update(text_color='#37ff5a')
            elif res[1] == 'maybe':
                window[f"RADIO{res[0]}-text"].update(text_color='#ffa500')
            else:
                window[f"RADIO{res[0]}-text"].update(text_color='#ff4f4f')
        elif event == 'Назад':
            window.close()
            break
        elif event == 'Далее':
            filtered = [filter_key(k) for k, v in values.items() if v is True]
            data['error_docs'] = [radios[f] for f in filtered if f is not None]
            window.hide()
            eda_fou_main(data)
            window.un_hide()
 def GraphColumn(name, key):
     col = sg.Col([[
         Txt(name, key=key + '_TXT_'),
     ],
                   [
                       sg.Graph((GRAPH_WIDTH, GRAPH_HEIGHT), (0, 0),
                                (GRAPH_WIDTH, 100),
                                background_color='black',
                                key=key + '_GRAPH_')
                   ]],
                  pad=(2, 2))
     return col