Esempio n. 1
0
def create_settings_window(settings):
    sg.theme(settings['color_theme'])

    def TextLabel(text): return sg.Text(text+':', justification='r', size=(25,1))

    layout = [  [sg.Text('Settings', font=('Work Sans', 12))],
                [TextLabel('Track Hedge Address(es)'),sg.Input(key='-ADDR-')],
                [TextLabel('Coordinate System'), sg.Combo(COORD_SYS_CHOICES, key='-COORD_SYS-')],
                [TextLabel('Units'), sg.Combo(UNITS_CHOICES, key='-UNITS-')],
                [TextLabel('Precision'), sg.Combo(PREC_CHOICES, key='-PREC-')],
                [TextLabel('Refresh Rate (ms)'), sg.Input(key='-FREQ-')],
                [TextLabel('Logfile Folder'),sg.Input(key='-LOGDIR-'), sg.FolderBrowse(target='-LOGDIR-')],
                [TextLabel('Number of position values to average'),sg.Input(key='-NUMLINES-')],
                [TextLabel('Time until log considered stale (ms)'), sg.Input(key='-ALLOW_DELTA_T-')],
                [TextLabel('Color Theme'),sg.Combo(sg.theme_list(), key='-THEME-')],
                [sg.Button('Save'), sg.Button('Restore Defaults'), sg.Button('Exit')]  ]

    window = sg.Window('Settings', layout, keep_on_top=True, finalize=True)

    for key in SETTINGS_KEYS_TO_ELEMENT_KEYS:   # update window with the values read from settings file
        try:
            window[SETTINGS_KEYS_TO_ELEMENT_KEYS[key]].update(value=settings[key])
        except Exception as e:
            print(f'Problem updating PySimpleGUI window from settings. Key = {key}')

    return window
Esempio n. 2
0
File: ip.py Progetto: sg-ja/IP-GUI
def init_gui():
    global window
    global adapters
    global values

    sg.theme("Reddit")

    layout_frame = [
        [sg.Checkbox("DHCP", key="DHCP", enable_events=True)],
        [sg.Text("")],
        [sg.Text("IP: ", size=(15, 1)),
         sg.Input(size=(15, 1), key="IP")],
        [sg.Text("Sub: ", size=(15, 1)),
         sg.Input(size=(15, 1), key="SUB")],
        [
            sg.Text("Gateway: ", size=(15, 1)),
            sg.Input(size=(15, 1), key="GATE")
        ],
    ]

    layout = [[
        sg.Combo(adapters, enable_events=True, key="DROP", readonly=True),
    ], [
        sg.Frame(
            "Network",
            layout_frame,
        ),
    ], [sg.Button("Update", size=(15, 1), key="UPDATE")]]

    window = sg.Window("IP", layout, icon="favicon.png")

    window.read(1)
    update_text(window, 0)
Esempio n. 3
0
def create_conf_window(parser):
    sg.theme(parser.get('gui_settings','theme'))

    def TextLabel(text): return sg.Text(text+':', justification='r', size=(25,1))
    
    layout = [
        [sg.Text('Choose Configuration', font = 'Any 20', justification='c')],
        [sg.Text('')],
        [TextLabel('Output Directory'), sg.Input(key='-OUTDIR-'), sg.FolderBrowse(target='-OUTDIR-')],
        [TextLabel('FASTQ Files Directory'), sg.Input(key='-FASTQ-'), sg.FolderBrowse(target='-FASTQ-')],
        [TextLabel('Spectra Files Directory'), sg.Input(key='-SPECTRA-'), sg.FolderBrowse(target='-SPECTRA-')],
        [sg.Text('')],
        [TextLabel('Trinity'), sg.Input(key='-TRINITY-'), sg.FileBrowse(target='-TRINITY-')],
        [TextLabel('hg19'), sg.Input(key='-HG19-'), sg.FileBrowse(target='-HG19-')],
        [TextLabel('SearchGUI'), sg.Input(key='-SEARCHGUI-'), sg.FileBrowse(target='-SEARCHGUI-')],
        [TextLabel('PeptideShaker'), sg.Input(key='-PEPTIDE-'), sg.FileBrowse(target='-PEPTIDE-')],
        [TextLabel('ACTG'), sg.Input(key='-ACTG-'), sg.FolderBrowse(target='-ACTG-')],
        [sg.Text('')],
        [TextLabel('Transcriptome GTF'), sg.Input(key='-GTF-'), sg.FolderBrowse(target='-GTF-')],
        [TextLabel('Reference genome'), sg.Input(key='-REF-'), sg.FolderBrowse(target='-REF-')],
        [TextLabel('Mapping Method'), sg.Combo(['PV','PS','VO','SO'],key='-MAP-')],
        [TextLabel('Protein Database'), sg.Input(key='-DB-'), sg.FileBrowse(target='-DB-')],
        [TextLabel('Serialization File'), sg.Input(key='-SER-'), sg.FileBrowse(target='-SER-')],
        [sg.Text('')],
        [TextLabel('Bamstats'), sg.Input(key='-BAMSTATS-'), sg.FileBrowse(target='-BAMSTATS-')],
        [TextLabel('BAM Files'), sg.Input(key='-BAM-'), sg.FolderBrowse(target='-BAM-')],
        [TextLabel('BED File'), sg.Input(key='-BED-'), sg.FileBrowse(target='-BED-')],
        [sg.Text('')],
        [TextLabel('DeNoPro Location'), sg.Input(key='-DENOPRO-'), sg.FolderBrowse(target='-DENOPRO-')],
        [sg.Text('')],
        [TextLabel('Theme'), sg.Combo(sg.theme_list(), size=(17, 0.8), key='-THEME-')],
        [sg.Text('')],
        [sg.Text('')],
        [sg.Button('Save'), 
            sg.InputText('', do_not_clear=False, visible=False, key='-filename-',enable_events=True),
            sg.FileSaveAs('Save As'),sg.Button('Exit')]
    ]

    window = sg.Window("Config", keep_on_top=True).Layout([[sg.Column(layout,size = (680,720),scrollable=True)]]).Finalize()

    for k,v in conf_keys.items():
        try:
            window[conf_keys[k][2]].update(value=parser.get(v[0],k))
        except Exception as e:
            print(f'Problem updating GUI window from config. Key = {k}')
    return window
Esempio n. 4
0
def _layout_(config):
    import PySimpleGUIQt as qt
    struct = [[qt.Menu(_top_menu_())], [qt.Text('Welcome to Test API!')],
              [qt.Combo(['Living Room', 'Playroom'])],
              [qt.Frame('', _sense_frame_(config))],
              [qt.Frame('', list(_button_frame_()))]]

    return struct
Esempio n. 5
0
 def form_frame():
     _layout = [[
         qt.Text('Look & Feel: '),
         qt.Combo(qt.theme_list(),
                  enable_events=True,
                  key='look_and_feel_combo')
     ]]
     _frame = qt.Frame('Settings', _layout)
     return _frame
Esempio n. 6
0
def main():
    sg.ChangeLookAndFeel('GreenTan')
    # sg.SetOptions(element_padding=(0,0))
    # ------ Menu Definition ------ #
    menu_def = [
        ['&File', ['&Open', '&Save', '&Properties', 'E&xit']],
        [
            '&Edit',
            ['&Paste', [
                'Special',
                'Normal',
            ], 'Undo'],
        ],
        ['&Toolbar', ['Command &1', 'Command &2', 'Command &3', 'Command &4']],
        ['&Help', '&About...'],
    ]

    treedata = sg.TreeData()

    treedata.Insert(
        "",
        '_A_',
        'Tree Item 1',
        [1, 2, 3],
    )
    treedata.Insert(
        "",
        '_B_',
        'B',
        [4, 5, 6],
    )
    treedata.Insert(
        "_A_",
        '_A1_',
        'Sub Item 1',
        ['can', 'be', 'anything'],
    )
    treedata.Insert(
        "",
        '_C_',
        'C',
        [],
    )
    treedata.Insert(
        "_C_",
        '_C1_',
        'C1',
        ['or'],
    )
    treedata.Insert("_A_", '_A2_', 'Sub Item 2', [None, None])
    treedata.Insert("_A1_", '_A3_', 'A30', ['getting deep'])
    treedata.Insert("_C_", '_C2_', 'C2', ['nothing', 'at', 'all'])

    for i in range(100):
        treedata.Insert('_C_', i, i, [])

    frame1 = [
        [sg.Input('Input Text', size=(250, 35)),
         sg.Stretch()],
        [
            sg.Multiline(size=(250, 75), default_text='Multiline Input'),
            sg.MultilineOutput(size=(250, 75), default_text='Multiline Output')
        ],
    ]

    frame2 = [
        [sg.Listbox(['Listbox 1', 'Listbox 2', 'Listbox 3'], size=(200, 85))],
        [
            sg.Combo(['Combo item 1', 'Combo item 2', 'Combo item 3'],
                     size=(200, 35))
        ],
        [sg.Spin([1, 2, 3], size=(40, 30))],
    ]

    frame3 = [
        [sg.Checkbox('Checkbox1', True),
         sg.Checkbox('Checkbox1')],
        [
            sg.Radio('Radio Button1', 1),
            sg.Radio('Radio Button2', 1, default=True),
            sg.Stretch()
        ],
    ]

    frame4 = [
        [
            sg.Slider(range=(0, 100),
                      orientation='v',
                      size=(3, 30),
                      default_value=40),
            sg.Dial(range=(0, 100),
                    tick_interval=50,
                    size=(150, 150),
                    default_value=40),
            sg.Stretch()
        ],
    ]
    matrix = [[str(x * y) for x in range(4)] for y in range(3)]

    frame5 = [
        [
            sg.Table(values=matrix,
                     max_col_width=25,
                     auto_size_columns=True,
                     display_row_numbers=True,
                     change_submits=False,
                     bind_return_key=True,
                     justification='right',
                     num_rows=8,
                     alternating_row_color='lightblue',
                     key='_table_',
                     text_color='black'),
            sg.Tree(data=treedata,
                    headings=['col1', 'col2', 'col3'],
                    change_submits=True,
                    auto_size_columns=True,
                    num_rows=10,
                    col0_width=10,
                    key='_TREE_',
                    show_expanded=True,
                    size=(200, 150)),
            sg.Stretch()
        ],
    ]

    graph_elem = sg.Graph((880, 150), (0, 0), (600, 300), key='+GRAPH+')

    frame6 = [
        [graph_elem, sg.Stretch()],
    ]

    tab1 = sg.Tab('Graph Number 1', frame6)
    tab2 = sg.Tab('Graph Number 2', [[]])

    layout = [
        [sg.Menu(menu_def)],
        [
            sg.Image(data_base64=logo),
            sg.Frame('Input Text Group', frame1, title_color='red'),
            sg.Stretch()
        ],
        [
            sg.Frame('Multiple Choice Group', frame2, title_color='green'),
            sg.Frame('Binary Choice Group', frame3, title_color='purple'),
            sg.Frame('Variable Choice Group', frame4, title_color='blue'),
            sg.Stretch()
        ],
        [
            sg.Frame('Structured Data Group', frame5, title_color='red'),
        ],
        # [sg.Frame('Graphing Group', frame6)],
        [sg.TabGroup([[tab1, tab2]])],
        [
            sg.ProgressBar(max_value=600,
                           start_value=400,
                           size=(600, 25),
                           key='+PROGRESS+'),
            sg.Stretch(),
            sg.ButtonMenu('&Menu', ['Menu', ['&Pause Graph', 'Menu item']],
                          key='_MENU_'),
            sg.Button('Button'),
            sg.Button('Exit')
        ],
    ]

    window = sg.Window('Window Title',
                       font=('Helvetica', 13),
                       default_button_element_size=(100, 30),
                       auto_size_buttons=False,
                       default_element_size=(200,
                                             22)).Layout(layout).Finalize()
    graph_elem.DrawCircle((200, 200), 50, 'blue')
    i = 0
    graph_paused = False
    while True:  # Event Loop
        # sg.TimerStart()
        event, values = window.Read(timeout=0)
        if event is None or event == 'Exit':
            break
        if event == 'Button':
            print(event, values)
        if values['_MENU_'] == 'Pause Graph':
            graph_paused = not graph_paused
        if not graph_paused:
            i += 1

            if i >= 600:
                graph_elem.Move(-1, 0)
            graph_elem.DrawLine((i, 0), (i, randint(0, 300)),
                                width=1,
                                color='#{:06x}'.format(randint(0, 0xffffff)))
        window.FindElement('+PROGRESS+').UpdateBar(i % 600)

        # sg.TimerStop()
    window.Close()
Esempio n. 7
0
def welcome_layout():
    frame_1 = [
        [sg.Text('Balança: ')], [sg.Combo(['Nenhuma', 'Toledo', 'Filizola', 'Urano'],
                                          font=("verdana", 11), key="balance_name", enable_events=True, size=(13, 0.8))],
        [sg.Text('Porta Serial: ')], [sg.Combo(get_serial_names(), font=("verdana", 13),
                                               key="serial_port", size=(13, 0.8))],
        [sg.Text('Baud Rate: ')], [sg.Combo([2400, 4800, 9600, 14400, 19200, 38400,
                                             56000, 57600], font=("verdana", 11), key="baudrate", size=(13, 0.8))],
        [sg.Text('Data Bits: ')], [sg.Combo([5, 6, 7, 8], font=("verdana", 11), key="data_bits", size=(13, 0.8))],
        [sg.Text('Parity: ')], [sg.Combo(['none', 'odd', 'even', 'mark', 'space'],
                                         font=("verdana", 11), key="parity", size=(13, 0.8))],
        [sg.Text('Stop Bits:')], [sg.Combo([1, 1.5, 2], font=("verdana", 11), key="stop_bits", pad=[1, 0], size=(13, 0.8))],
        [sg.Text('Handshaking: ')], [sg.Combo(['Nenhum', 'XON/XOFF', 'RTS/CTS', 'DTR/DSR'],
                                              font=("verdana", 11), key="handshaking", pad=[1, 0], size=(13, 0.8))]
    ]

    frame_2 = [
        [sg.Text('')],
        [sg.Input(get_last_weight(), do_not_clear=True, size=(25, 0.8), tooltip='Último Peso Lido', disabled=True, key='last_weight'),
         sg.Text(' '), sg.Input('1', do_not_clear=True, size=(15, 0.8), tooltip='Timeout', key='timeout'), sg.Stretch()],
        [sg.Text('')],
        [sg.Text('Última Resposta: ')], [sg.Multiline(size=(41.5, 8.6), key='Textbox', disabled=True)],
        [sg.Text('Pesagem Apurada: ')], [sg.Multiline(size=(41.5, 4.6),
                                                      default_text=get_last_weight() + ' KG', font=('Helvetica Bold', 48), key='Textbox2', disabled=True)],
        [sg.Text('')],
        [sg.Text('')],
        [sg.Text('')],
    ]

    frame_3 = [
        [sg.Text('')],
        [sg.Text(''), sg.Text(' ' * 2), sg.Button('Ativar', size=[14, 0.8],
                                                  button_color=('white', '#082567'), key="activate"), sg.Text(''), sg.Text('')],
        [sg.Text('')],
        [sg.Text(''), sg.Text(' ' * 2), sg.Button('Desativar', size=[14, 0.8],
                                                  button_color=('white', '#082567'),
                                                  key="deactivate", disabled=True), sg.Text(''), sg.Text('')],
        [sg.Text('')],
        [sg.Text(''), sg.Text(' ' * 2), sg.Button('Ler Peso', size=[14, 0.8],
                                                  button_color=('white', '#082567'), key="weight_read"), sg.Text(''), sg.Text('')],
        [sg.Text('')],
        [sg.Text(''), sg.Text(' ' * 2), sg.Button('Localizar Portas', size=[14, 0.8],
                                                  button_color=('white', '#082567'), key="find_ports"), sg.Text(''), sg.Text('')],
        [sg.Text('')],
        [sg.Text(''), sg.Text(' ' * 2), sg.Button('Limpar', size=[14, 0.8],
                                                  button_color=('white', '#082567'), key="clean"), sg.Text(''), sg.Text('')],
        [sg.Text('')],
        [sg.Text(''), sg.Text(' ' * 2), sg.Button('Sair', size=[14, 0.8],
                                                  button_color=('white', '#082567'), key="exit"), sg.Text(''), sg.Text('')],
        [sg.Text('')],
    ]

    layout_1 = [
        [sg.Text('')],
        [sg.Text(' '), sg.Frame('Ajustes Técnicos', frame_1, title_color='black', element_justification="l", key='frame_1'), sg.Text(' '),
         sg.Frame('Visualização de dados', frame_2, title_color='black', element_justification="c", key='frame_2'), sg.Text(' '),
         sg.Frame('Serviços', frame_3, title_color='black', element_justification="r", key='frame_3'), sg.Stretch()],
        [sg.Text(f'Versão: {__version__} by {__author__}', text_color="black", font=("verdana", 8)),
         sg.Text(get_current_date(), justification="right", text_color="black", key="clock", font=("verdana", 8))
         ],
    ]

    return layout_1
Esempio n. 8
0
    # Application Layout
    sg.theme('Default')

    # HTTP Frame Layout
    http_frame = [
        sg.Frame(
            'HTTP Parameters',
            layout=[[
                sg.Text('URL :', size=(15, 1)),
                sg.InputText(enable_events=True, key='url')
            ],
                    [
                        sg.Text('Request type: ', size=(15, 1)),
                        sg.Combo(values=['GET', 'POST'],
                                 default_value='GET',
                                 readonly=True,
                                 auto_size_text=True,
                                 enable_events=True,
                                 key='http_request')
                    ],
                    [
                        sg.Frame(
                            'Data',
                            layout=[[
                                sg.Text('Cover data', size=(8, 1)),
                                sg.Input(key='http_cover'),
                                sg.FileBrowse()
                            ],
                                    [
                                        sg.Text('Secret data', size=(8, 1)),
                                        sg.Input(key='http_secret'),
                                        sg.FileBrowse()
Esempio n. 9
0
def main():
    sg.theme('SystemDefaultForReal')
    main_window = None

    command_to_run = 'denopro '
    layout = [
        [sg.Text('DeNoPro : de novo Proteogenomics Pipeline', justification='c', font=('Any',22))],
        
        [sg.Text('')],
        
        [sg.Text('Mode : ', size=(10,1), justification='r'), 
            sg.Combo(['assemble','searchdb','identify','novelorf', 'quantify'],key='mode'),
            sg.Text('CPU:', justification='r'), 
            sg.Input(key='cpu',font = 'Any 10', size=(5,0.8)), 
            sg.Text('Max mem:', size=(10,1), justification='r'), 
            sg.Input(key='max_mem', font = 'Any 10', size=(5,0.8))],
        
        [sg.Text('Config : ', size=(9,1), justification='r'), 
            sg.Input(key='-config-', enable_events=True),
            sg.FileBrowse('Select',target='-config-',size = (10,0.8),file_types=(('Config Files','*.conf'),('INI files','*.ini'))), 
            sg.Button('Change Configuration', size=(22,0.8))],
        
        [sg.Text('')],
        #output
        [sg.Text('Final Command:')], 
        
        [sg.Text(size=(90,3),key='command_line', text_color='red',font='Courier 8')],
        
        [sg.Output(size=(90,16), font='Courier 10', key='-ML-')],
        
        [sg.Button('Start', button_color=('white','green')), 
            sg.Button('Exit', button_color=('white','#8a2815'))]
    ]   

    main_window = sg.Window('DeNoGUI', layout, font = 'Helvetica 12', finalize=True)

    while True: 
        event,values = main_window.read()
        # define exit
        if event in (sg.WIN_CLOSED, 'Exit'):
            break
        # Config Loop
        if event == 'Change Configuration':
            # set the main config (if called)
            if values['-config-']:
                chosenConfig = values['-config-']
                parser = load_parser(chosenConfig)
                event,values = create_conf_window(parser).read(close=True)
                if event == 'Save':
                    save_config(chosenConfig,parser,values)
                elif event == '-filename-':
                    filename = values['-filename-']
                    save_config(filename,parser,values)
            else:
                sg.popup('No config file selected, will create one for you...')
                createdParser = create_parser(default_conf) 
                createdParser.set('gui_settings','theme','SystemDefaultForReal')
                event,values = create_conf_window(createdParser).read(close=True)
                if event == 'Save':
                    sg.popup('Please Save As a new file.')
                elif event == '-filename-':
                    filename = values['-filename-']
                    save_config(filename,createdParser,values)
        # Main Loop
        if event == 'Start':
            params = ''
            params += f"{values['mode']} -c {values['-config-']}" 
            if values['mode'] == 'assemble':
                params += f" --cpu {values['cpu']} --max_mem {values['max_mem']}G"
            command = command_to_run + params
            main_window['command_line'].update(command)
            runCommand(cmd = command, window=main_window)
        
    main_window.close()
Esempio n. 10
0
 ],
 [
     sg.Text('Input something here'),
     sg.Stretch(),
     sg.Input('This is an InputText Element',
              key='_INPUT_',
              font=('Any', 14))
 ],
 [
     sg.Text('This is the new Dial Element'),
     sg.Dial(background_color='red'),
     sg.Stretch()
 ],
 [
     sg.Combo(['Combo 1', 'Combo 2', 'Combo 3'],
              key='+COMBO+',
              size=(150, 30),
              text_color='green')
 ],
 [
     sg.Listbox(['Listbox Item 1', 'Listbox Item 2', 'Listbox Item 3'],
                key='+LIST+',
                size=(200, 150),
                text_color='blue'),
     sg.Slider((1, 100), orientation='v', key='+SLIDER 1+')
 ],
 [
     sg.Slider((1, 10), size=(200, 30), orientation='h', key='+SLIDER 2+'),
     sg.Stretch()
 ],
 [
     sg.Checkbox('Checkbox 1', key='+CB1+'),
Esempio n. 11
0
def main():
    # set program theme
    theme_name = 'DarkPurple4'
    sg.theme(theme_name)

    os.system('color')

    # define default values for UI
    default_size_text = (30, 1)
    default_size_input = (50, 1)
    default_size_input_with_button = ((30, 1), (15, 1))

    # define file handeling modes for song duplicates
    dupli_mode = {
        'radio_move': 'Move when in other list',
        'radio_copy': 'Copy when in other list',
        'radio_download': 'Download again'
    }

    # create progress bars and their labels
    progresses = [(sg.Text(f'ProgBar {key}: None',
                           key=f'-{key}_text',
                           visible=False),
                   sg.ProgressBar(100,
                                  key=f'-{key}_progressbar',
                                  visible=False)) for key in range(1, 51)]
    # make layout
    layout = [[
        sg.Text('Username: '******'', key='username_input', enable_events=True),
        sg.Button('Check', key='username_button')
    ],
              [
                  sg.Text('Anime Music Dir: '),
                  sg.Input(ml.library_dir,
                           key='dir_input',
                           disabled=True,
                           enable_events=True),
                  sg.FolderBrowse(initial_folder=ml.get_default_dir(),
                                  key='dir_browse')
              ],
              [
                  sg.Radio(dupli_mode[key],
                           group_id='dupli',
                           key=key,
                           enable_events=True)
                  for i, key in enumerate(dupli_mode)
              ],
              [
                  sg.Text('Thread count: '),
                  sg.Combo(list(range(1, 51)),
                           default_value=1,
                           key='thread_count_combo',
                           enable_events=True)
              ],
              [
                  sg.Column(progresses,
                            scrollable=True,
                            key='progresses_column',
                            size=(700, 200))
              ], [sg.Button('Download', key='download_button')],
              [sg.Button('', visible=False, key='--PROGRESS_UPDATE--')]]

    to_disable = [
        'download_button', 'username_input', 'username_button', 'dir_input',
        'dir_browse', 'radio_move', 'radio_copy', 'radio_download'
    ]

    # make window
    window = sg.Window("MalMuzic", layout, finalize=True, resizable=False)

    # for x in range(50):
    #     progresses[x][1].UpdateBar(50)

    # set default values to UI
    layout[2][0].update(value=True)

    # set more variables
    input_default_color = sg.LOOK_AND_FEEL_TABLE[theme_name]['INPUT']
    run_thread_running = False
    run_thread: Tuple[Event, Thread] = None  # type: ignore
    to_close = False

    # helper function for main
    def check_username():
        print(f'[I] Looking for mal user "{values["username_input"]}"')
        exists = mm.user_exists(values["username_input"])
        print('[I] Username exists'
              if exists else '[I] Username doesn\'t exists')
        if not exists:
            window['username_input'].update(background_color='#FF7777')
        else:
            window['username_input'].update(
                background_color=input_default_color)
        return exists

    def get_dupli_mode():
        for i, key in enumerate(dupli_mode):
            if window[key].get():
                return i

    # UI loop
    while not to_close:
        event, values = window.read()  # type: ignore
        if event == sg.WIN_CLOSED or event is None:
            to_close = True
            if run_thread is not None:
                run_thread[0].set()
            continue
        # print('[I]', event, values[event] if event in values else '')
        if event == 'username_button':
            check_username()
        if event == 'download_button':
            if not run_thread_running:
                print('[I] Checking username')
                if not check_username():
                    continue

                ml.library_dir = values['dir_input']

                window['download_button'](
                    text=window['download_button'].ButtonText + ' Disabled')
                for dis in to_disable:
                    window[dis](disabled=True)

                run_thread = run(window,
                                 values["username_input"],
                                 progresses,
                                 window['progresses_column'],
                                 dir=ml.library_dir,
                                 thread_count=values['thread_count_combo'])
            else:
                cprint('[E] Download already running', 'red')

        if event == 'thread_count_combo':
            print(f'[I] User choose {values[event]} threads to run async')
        if event in dupli_mode:
            print(f'[I] User choose: "{dupli_mode[event]}"')
        if event == '--PROGRESS_UPDATE--':
            # progresses[values[event][0]][1].UpdateBar(values[event][2])
            for i in range(len(st.threads)):
                if st.threads[i] is not None:
                    if hasattr(st.threads[i][1], 'percent'):
                        progresses[i][1].UpdateBar(st.threads[i][1].percent)
                        progresses[i][0].update(
                            value=st.threads[i][1].request + ': ' +
                            str(st.threads[i][1].total_kb) + 'kB, ' +
                            str(round(st.threads[i][1].rate, 1)) + 'kB/s')

    if run_thread is not None:
        print('[I] Download thread still running, joining with it.')
        run_thread[1].join()

    window.close()
    print('[!] Exiting program')
Esempio n. 12
0
             text_color='red')
 ],
 [sg.Text('Single Line Input', size=(200, 35)),
  sg.Input(size=(200, 25))],
 [
     sg.Text('Multi Line\nInput/Output', size=(200, 60)),
     sg.Multiline(size=(200, 75))
 ],
 [
     sg.Text('ListBox', size=(200, 35)),
     sg.Listbox(['Listbox 1', 'Listbox 2', 'Listbox 3'], size=(200, 85))
 ],
 [
     sg.Text('ComboBox / Dropdown', size=(200, 25)),
     sg.Combo([
         'Combo item 1',
     ], size=(200, 35))
 ], [sg.Text('Spinner', size=(200, 35)),
     sg.Spin([1, 2, 3], size=(40, 30))],
 [
     sg.Text('Checkbox', size=(200, 35)),
     sg.Checkbox('Checkbox', change_submits=True)
 ], [sg.Text('RadioButton', size=(200, 35)),
     sg.Radio('Radio Button', 1)],
 [sg.Text('Slider', size=(200, 35)),
  sg.Slider(orientation='h')],
 [sg.Text('Button', size=(200, 35)),
  sg.Button('Button')],
 [sg.Text('Table', size=(200, 35)),
  sg.Table([[0, 1, 3, 4]])],
 [
def openGUI(mode):

    # Define URL as global so we can change the value in the updater thread too
    global URL

    # Path to loginusers.vdf file which contains list of all Steam accounts on PC
    steamUsers = get_reg(r"SteamPath", REG_STEAM) + "/config/loginusers.vdf"

    # Extract the currently used profile from the windows registry (if it exists)
    defaultProfile = get_reg(r"SteamUser", REG_AMONG_US) 

    # Dictionary which will store Steam Alias & ID used for config directory path
    userKey = {}

    # Array containing a list of all Steam Aliases - Used to lookup above dictionary
    userVal = []

    # Set the overall theme of the window to "Dark Blue"
    sg.theme('DarkBlue')

    # Open the config file that contains list of all Steam accounts and extract required info
    with open(steamUsers) as f:
        lines = f.readlines()
        i = 0
        for line in lines:
            if "PersonaName" in line:
                userKey[(line.replace('\t\t"PersonaName"\t\t', '').replace('"','').replace('\n', ''))] = int(lines[i - 3].replace('\t','').replace('"', '')) - STEAMID64
                userVal.append(line.replace('\t\t"PersonaName"\t\t', '').replace('"','').replace('\n', ''))
            i += 1

    # Define the layout of our GUI and the conditions required
    layout = [
        [sg.Text("Steam Profile to use:")],
        [sg.Combo(userVal, default_value=defaultProfile, enable_events=True, key='-PROFILE-', readonly=True, size=(30,1), disabled=True if mode == "BACKGROUND" else False)],
        [sg.Text(size=(30,0.5))],
        [sg.Text("REST Endpoint to upload Statistics to:")],
        [sg.In(URL, size=(30, 1), enable_events=True, key="-REST-")],
        [sg.Button('Test Endpoint',size=(10,1), disabled=True, button_color=('grey', 'lightgrey')),sg.Text(key="-STATUS-")],
        [sg.Text(size=(30,0.5))],
        [sg.Button('Apply' if mode == "BACKGROUND" else "Install"), sg.Button('Close' if mode == 'BACKGROUND' else 'Exit')]
    ]

    layoutPopup = [
        [sg.Text('Steam will be closed while\nchanges are made.\n\nWould you like to continue?\n')],
        [sg.Button('Yes'), sg.Button('No')]
    ]

    layoutPopup2 = [
        [sg.Text('You can now play Among us as normal.\n\nClick OK to exit setup.')],
        [sg.Button('OK')]
    ]

    # Create the window
    window = sg.Window(APP_NAME, layout, auto_size_buttons=True, resizable=False, disable_close=False, disable_minimize=True, icon=ICON)
    
    # Create an event loop
    while True:
        event, values = window.read()

        # If Exit/Close or the X are pressed, exit the GUI loop
        if event == "Exit" or event == "Close" or event == sg.WIN_CLOSED:
            break

        # If any change is detected to the Steam Profile dropdown, re-enable the Install button
        if event == "-PROFILE-":
            window['Install' if mode == 'INTERACTIVE' else 'Apply'].update(disabled=False)
            window['Install' if mode == 'INTERACTIVE' else 'Apply'].update(button_color=('black', 'white'))

        # If the Test Endpoint button is pressed, Disable button & ping endpoint.
        if event == "Test Endpoint":
            window['Test Endpoint'].update(disabled=True)
            window['Test Endpoint'].update(button_color=('grey', 'lightgrey'))

            try:
                response = requests.post(values['-REST-'])
                if response.status_code == 200:
                    window['-STATUS-'].update('Success', text_color='green')
                else:
                    window['-STATUS-'].update('Failed', text_color='red')
            except requests.exceptions.RequestException as e:
                log('The following error occured while trying to test the REST Endpoint:')
                log(values['-REST-'])
                log(e)

        # If change detected to the -REST- string then re-enable install & test buttons
        if event == "-REST-":
            window['Test Endpoint'].update(disabled=False)
            window['Test Endpoint'].update(button_color=('black', 'white'))
            window['Install' if mode == 'INTERACTIVE' else 'Apply'].update(disabled=False)
            window['Install' if mode == 'INTERACTIVE' else 'Apply'].update(button_color=('black', 'white'))

        # If Install/Update selected then update all relevant values to registry
        if event == "Install" or event == "Apply":
            
            steamOpen = False

            # Disable Install/Update button to stop spam
            window['Install' if mode == 'INTERACTIVE' else 'Apply'].update(disabled=True)
            window['Install' if mode == 'INTERACTIVE' else 'Apply'].update(button_color=('grey', 'lightgrey'))
            
            # If Steam is running and application running in interactive mode, close it first
            if mode == "INTERACTIVE" and process_running(STEAM_EXE):
                warningPopup = sg.Window("Alert!", layoutPopup, auto_size_buttons=True, resizable=False, disable_close=False, disable_minimize=True, icon=ICON)
                closeSteam = warningPopup.read() 
                warningPopup.close()
                if closeSteam[0] == 'Yes':
                    subprocess.call(["TASKKILL","/F","/IM",STEAM_EXE], shell=True)
                    time.sleep(2)
                    steamOpen = True
                else:
                    continue

            set_reg(r"Install Path", APP_EXE, REG_AMONG_US)
            set_reg(r"SteamUser", values['-PROFILE-'], REG_AMONG_US)
            set_reg(r"SteamDir", str(userKey[values['-PROFILE-']]), REG_AMONG_US)
            set_reg(r"REST Endpoint", values['-REST-'], REG_AMONG_US)
            set_reg(r"Version", VERSION, REG_AMONG_US)

            URL = values['-REST-']

            updateConfig(STEAM_CONFIG_PATH.format(userKey[values['-PROFILE-']]))

            if mode == "INTERACTIVE":
                sg.Window("Script has been Installed!", layoutPopup2, auto_size_buttons=True, resizable=False, disable_close=False, disable_minimize=True, icon=ICON).read()
                if steamOpen:
                    subprocess.Popen(STEAM_EXE_PATH)
                break
            else:
                sg.popup("Settings have been successfully applied.")

    window.close()