Esempio n. 1
0
    def _show_preferences(self):
        layout = [[sg.Text("Settings:")],
                  [sg.Text("Speech recognition engine:"), sg.Drop(self._view_model.possible_engines, readonly=True,
                                                                  default_value=self._view_model.get_engine(),
                                                                  key=ENGINE_DROP, enable_events=True)],
                  [sg.Text("Sound device:"), sg.Drop(self._view_model.get_sound_devices(), readonly=True,
                                                     default_value=self._view_model.get_audio_device(),
                                                     key=DEVICE_DROP)],
                  [sg.Text("Result path:"), sg.In(disabled=True, key=PATH_INPUT,
                                                  default_text=self._view_model.get_result_path()), sg.FolderBrowse()],
                  [sg.Text("Engine specific settings:")],
                  [sg.Text("API key:"), sg.In(key=KEY_INPUT, default_text=self._view_model.get_key(),
                                              password_char='*')],
                  [sg.Text("Language:"), sg.Drop(self._view_model.possible_languages, key=LANGUAGE_DROP,
                                                 default_value=self._view_model.get_language())],
                  [sg.Text("Region (optional):"), sg.In(key=REGION_INPUT, default_text=self._view_model.get_region())],
                  [sg.Button(APPLY_BUTTON)]]

        window = sg.Window("Preferences", layout)

        while True:
            event, values = window.read()

            if event == ENGINE_DROP:
                window.find_element(LANGUAGE_DROP).update(self._view_model.get_language(values[ENGINE_DROP]))
                window.find_element(REGION_INPUT).update(self._view_model.get_region(values[ENGINE_DROP]))
                window.find_element(KEY_INPUT).update(self._view_model.get_key(values[ENGINE_DROP]))
            elif event == APPLY_BUTTON:
                self._view_model.update_settings(values)
                break
            elif event == sg.WIN_CLOSED:
                break

        window.close()
Esempio n. 2
0
col2 = [[sg.Slider((1, 10)) for i in range(10)]]
sg.theme('DarkBrown1')

num_buttons = 2
layout = [[
    sg.Text('Your typed chars appear here:'),
    sg.Text('', key='_OUTPUT_')
], [sg.Input(do_not_clear=True, key='_IN_')], *[[
    sg.Button('Button'),
] for i in range(num_buttons)],
          [
              sg.Slider(range=(1, 100),
                        text_color='white',
                        orientation='h',
                        key='SLIDER'),
              sg.Drop(('Choice 1', 'choice 2'), key='DROP'),
              sg.Stretch()
          ],
          [
              sg.Button('Detailed Info'),
              sg.Button('Delete Rows'),
              sg.Button('Disappear'),
              sg.Button('Reappear')
          ],
          [
              sg.Button('Show Sliders'),
              sg.Button('Show Buttons'),
              sg.Button('Hide Sliders'),
              sg.Button('Hide Buttons'),
              sg.Button('Exit')
          ],
Esempio n. 3
0
def rename_dialog(src: str):
    import PySimpleGUIQt as G
    ske = PySimpleGUISpecialKeyEvent()
    conf_file = real_join_path('~', '.config/rename_dialog.json')
    root = 'root'
    fname = 'fname'
    ext = 'ext'
    key_new_root = 'key_new_root'
    key_new_base = 'key_new_base'
    ok = 'OK'
    cancel = 'Cancel'
    pattern = 'pattern'
    replace = 'replace'
    substitute = 'substitute'
    save_replace = 'save_replace'
    save_pattern = 'save_pattern'
    add_root = 'add_root'
    rename_info_file = 'rename_info_file'
    bytes_count = 'bytes_count'
    title = 'Rename - {}'.format(src)
    h = None

    conf = read_json_file(conf_file, default={pattern: [''], replace: ['']})
    tmp_pl = conf[pattern] or ['']
    tmp_rl = conf[replace] or ['']
    old_root, old_base = os.path.split(src)
    old_fn, old_ext = os.path.splitext(old_base)
    info_file_base = [
        f for f in os.listdir(old_root) if f.endswith('.info') and (
            f.startswith(old_fn) or old_fn.startswith(f.rstrip('.info')))
    ]
    has_info = True if info_file_base else False

    @deco_factory_retry(Exception, 0, enable_default=True, default=None)
    def re_sub():
        return re.sub(data[pattern], data[replace], data[fname] + data[ext])

    def count_name_bytes(name: str):
        d = {}
        try:
            c, b = encode_default_locale(name)
            d[c] = len(b)
        except UnicodeEncodeError:
            pass
        u8 = 'utf-8'
        if u8 not in d:
            try:
                c, b = encode_default_locale(name, u8)
                d[c] = len(b)
            except UnicodeEncodeError:
                pass
        return f'Basename Length: {len(name)}, {", ".join([f"{k.upper()} {v} bytes" for k, v in d.items()])}'

    # sg.theme('SystemDefaultForReal')
    layout = [[G.T(src, key='src')], [G.HorizontalSeparator()],
              [
                  G.I(old_fn, key=fname, focus=True),
                  G.I(old_ext, key=ext, size=(42, h))
              ],
              [
                  G.I(old_root, key=root),
                  G.B('+', key=add_root, size=(20, h)),
                  G.FolderBrowse('...',
                                 target=root,
                                 initial_folder=old_root,
                                 size=(20, h))
              ], [G.HorizontalSeparator()],
              [G.T('Regular Expression Pattern & Replacement')],
              [
                  G.T(size=(0, h)),
                  G.Drop(tmp_pl,
                         key=pattern,
                         enable_events=True,
                         text_color='blue'),
                  G.CB('',
                       default=True,
                       key=save_pattern,
                       enable_events=True,
                       size=(15, h)),
                  G.Drop(tmp_rl,
                         key=replace,
                         enable_events=True,
                         text_color='blue'),
                  G.CB('',
                       default=True,
                       key=save_replace,
                       enable_events=True,
                       size=(15, h)),
                  G.B('Go', key=substitute, size=(25, h))
              ], [G.HorizontalSeparator()], [G.I(old_root, key=key_new_root)],
              [G.I(old_base, key=key_new_base)],
              [
                  G.Submit(ok, size=(10, 1)),
                  G.Stretch(),
                  G.T(count_name_bytes(old_base), key=bytes_count),
                  G.Stretch(),
                  G.Cancel(cancel, size=(10, 1))
              ]]
    if has_info:
        info_file_base = info_file_base[0]
        info_filepath = os.path.join(old_root, info_file_base)
        with open(info_filepath, encoding='utf8') as f:
            info = f.read()
        layout.insert(2, [
            G.CB(info_file_base,
                 default=True,
                 key=rename_info_file,
                 enable_events=True)
        ])
        layout.insert(2, [G.ML(info, key='ML')])
        layout.insert(4, [G.HorizontalSeparator()])

    ensure_sigint_signal()
    window = G.Window(title,
                      layout,
                      return_keyboard_events=True,
                      finalize=True,
                      font='arial 10',
                      element_padding=(1, 1))
    window.bring_to_front()
    ml = window.find_element('ML', silent_on_error=True)
    if ml:
        ml.update(readonly=True)

    loop = True
    data = {
        fname: old_fn,
        ext: old_ext,
        pattern: tmp_pl[0],
        replace: tmp_rl[0],
        root: old_root,
        key_new_root: '',
        key_new_base: ''
    }

    while loop:
        dst_from_data = os.path.join(data[key_new_root], data[key_new_base])
        try:
            tmp_fname = re_sub() or data[fname] + data[ext]
            dst = os.path.realpath(os.path.join(data[root], tmp_fname))
        except TypeError:
            dst = src
        if dst != dst_from_data:
            nr, nb = os.path.split(dst)
            window[key_new_root].update(nr)
            window[key_new_base].update(nb)
            window[bytes_count].update(count_name_bytes(nb))

        event, data = window.read()
        for k in (root, fname, ext, key_new_root, key_new_base):
            window[k].update(text_color=None)
        cur_p = data[pattern]
        cur_r = data[replace]

        if event == ske.esc:
            loop = False
        elif event == add_root:
            os.makedirs(data[root], exist_ok=True)
        elif event == substitute:
            data[fname], data[ext] = os.path.splitext(
                re_sub() or data[fname] + data[ext])
            window[fname].update(data[fname])
            window[ext].update(data[ext])
        elif event == save_pattern:
            if data[save_pattern]:
                conf[pattern].insert(0, cur_p)
                conf[pattern] = dedup_list(conf[pattern])
            else:
                conf[pattern] = remove_from_list(conf[pattern], [cur_p])
        elif event == save_replace:
            if data[save_replace]:
                conf[replace].insert(0, cur_r)
                conf[replace] = dedup_list(conf[replace])
            else:
                conf[replace] = remove_from_list(conf[replace], [cur_r])
        elif event == pattern:
            window[save_pattern].update(value=cur_p in conf[pattern])
        elif event == replace:
            window[save_replace].update(value=cur_r in conf[replace])
        elif event == ok:
            try:
                shutil.move(src, dst)
                if has_info:
                    if data[rename_info_file]:
                        shutil.move(info_filepath,
                                    os.path.splitext(dst)[0] + '.info')
                loop = False
            except FileNotFoundError:
                for k in (root, fname, ext):
                    window[k].update(text_color='red')
            except FileExistsError:
                for k in (key_new_root, key_new_base):
                    window[k].update(text_color='red')
            except OSError as e:
                G.PopupError(str(e))
        elif event in (None, cancel):
            loop = False
        else:
            ...
    else:
        write_json_file(conf_file, conf, indent=0)

    window.close()
Esempio n. 4
0
import PySimpleGUIQt as sg

col = [[sg.Button('Button 1'),] for i in range(10)]
col2 = [[sg.Slider((1,10)) for i in range(10)]]

num_buttons = 2
layout = [[sg.Text('Your typed chars appear here:'), sg.Text('', key='_OUTPUT_')],
            [sg.Input(do_not_clear=True, key='_IN_')],
            *[[sg.Button('Button'),] for i in range(num_buttons)],
            [sg.Slider(range=(1,100), text_color='white', orientation='h', key='SLIDER'),
            sg.Drop(('Choice 1', 'choice 2'), key='DROP'), sg.Stretch()],
            [sg.Button('Detailed Info'), sg.Button('Delete Rows' ), sg.Button('Disappear') ,sg.Button('Reappear')],
            [sg.Button('Show Sliders'), sg.Button('Show Buttons'), sg.Button('Hide Sliders') ,sg.Button('Hide Buttons') , sg.Button('Exit')],
            [sg.Column(col, key='COL', visible=False), sg.Column(col2, key='COL2', visible=False)]
          ]

window = sg.Window('Window Title', resizable=True).Layout(layout).Finalize()

window.Element('SLIDER').Update(visible=False)
window.Element('SLIDER').Update(visible=False)
window.Refresh()
window.Refresh()

window.Size = window.Size

num_buttons = 2
while True:             # Event Loop
    event, values = window.Read()
    print(event, values, window.Size)
    if event is None or event == 'Exit':
        break
Esempio n. 5
0
def rename_dialog(src: str):
    import PySimpleGUIQt as sg
    ske = PySimpleGUISpecialKeyEvent()
    conf_file = real_join_path('~', '.config/rename_dialog.json')
    root = 'root'
    fname = 'fname'
    ext = 'ext'
    new_root = 'new_root'
    new_base = 'new_base'
    ok = 'OK'
    cancel = 'Cancel'
    pattern = 'pattern'
    replace = 'replace'
    substitute = 'substitute'
    save_replace = 'save_replace'
    save_pattern = 'save_pattern'
    add_root = 'add_root'
    title = 'Rename - {}'.format(src)
    h = .7

    conf = read_json_file(conf_file, default={pattern: [''], replace: ['']})
    tmp_pl = conf[pattern] or ['']
    tmp_rl = conf[replace] or ['']
    old_root, old_base = os.path.split(src)
    old_fn, old_ext = os.path.splitext(old_base)

    # sg.theme('SystemDefaultForReal')
    layout = [
        [sg.T(src, key='src')],
        [sg.HorizontalSeparator()],
        [sg.I(old_root, key=root),
         sg.B('+', key=add_root, size=(3, h)),
         sg.FolderBrowse('...', target=root, initial_folder=old_root, size=(6, h))],
        [sg.I(old_fn, key=fname, focus=True),
         sg.I(old_ext, key=ext, size=(6, h))],
        [sg.HorizontalSeparator()],
        [sg.T('Regular Expression Substitution Pattern & Replacement')],
        [sg.T(size=(0, h)),
         sg.Drop(tmp_pl, key=pattern, enable_events=True, text_color='blue'),
         sg.CB('', default=True, key=save_pattern, enable_events=True, size=(2, h)),
         sg.Drop(tmp_rl, key=replace, enable_events=True, text_color='blue'),
         sg.CB('', default=True, key=save_replace, enable_events=True, size=(2, h)),
         sg.B('Go', key=substitute, size=(3, h))],
        [sg.HorizontalSeparator()],
        [sg.I(old_root, key=new_root)],
        [sg.I(old_fn + old_ext, key=new_base)],
        [sg.Submit(ok, size=(10, 1)),
         sg.Stretch(),
         sg.Cancel(cancel, size=(10, 1))]]

    ensure_sigint_signal()
    window = sg.Window(title, return_keyboard_events=True).layout(layout).finalize()
    window.bring_to_front()

    loop = True
    data = {fname: old_fn, ext: old_ext, pattern: tmp_pl[0], replace: tmp_rl[0], root: old_root,
            new_root: '', new_base: ''}

    @decorator_factory_exception_retry(Exception, 0, enable_default=True, default=None)
    def re_sub():
        return re.sub(data[pattern], data[replace], data[fname] + data[ext])

    while loop:
        dst_from_data = os.path.join(data[new_root], data[new_base])
        try:
            tmp_fname = re_sub() or data[fname] + data[ext]
            dst = os.path.realpath(os.path.join(data[root], tmp_fname))
        except TypeError:
            dst = src
        if dst != dst_from_data:
            nr, nb = os.path.split(dst)
            window[new_root].update(nr)
            window[new_base].update(nb)

        event, data = window.read()
        f = window.find_element_with_focus()
        for k in (root, fname, ext, new_root, new_base):
            window[k].update(text_color=None)
        cur_p = data[pattern]
        cur_r = data[replace]

        if event == ske.esc:
            loop = False
        elif event == add_root:
            os.makedirs(data[root], exist_ok=True)
        elif event == substitute:
            data[fname], data[ext] = os.path.splitext(re_sub() or data[fname] + data[ext])
            window[fname].update(data[fname])
            window[ext].update(data[ext])
        elif event == save_pattern:
            if data[save_pattern]:
                conf[pattern].insert(0, cur_p)
                conf[pattern] = dedup_list(conf[pattern])
            else:
                conf[pattern] = remove_from_list(conf[pattern], [cur_p])
        elif event == save_replace:
            if data[save_replace]:
                conf[replace].insert(0, cur_r)
                conf[replace] = dedup_list(conf[replace])
            else:
                conf[replace] = remove_from_list(conf[replace], [cur_r])
        elif event == pattern:
            window[save_pattern].update(value=cur_p in conf[pattern])
        elif event == replace:
            window[save_replace].update(value=cur_r in conf[replace])
        elif event == ok:
            try:
                shutil.move(src, dst)
                loop = False
            except FileNotFoundError:
                for k in (root, fname, ext):
                    window[k].update(text_color='red')
            except FileExistsError:
                for k in (new_root, new_base):
                    window[k].update(text_color='red')
            except OSError as e:
                sg.PopupError(str(e))
        elif event in (None, cancel):
            loop = False
        else:
            ...
    else:
        write_json_file(conf_file, conf, indent=0)

    window.close()
Esempio n. 6
0
 [
     sg.Text('Type username:'******'usr_tx', size=(14, 1), pad=(16, 2)),
     sg.Text('', key='_OUTPUT_'),
     sg.Input(do_not_clear=True, pad=(15, 2), key='_IN_'),
     sg.Button('Enter',
               size=(12, 1),
               pad=(16, 2),
               font=("Helvetica", 12),
               key='etr_btn')
 ],
 [
     sg.Txt('Location (Time-Zone)', size=(17, 1), pad=(17, 2),
            key='loc_tz'),
     sg.Drop(locs_str,
             font=("Helvetica", 14),
             size=(8, 1),
             pad=(12, 1),
             key='loca'),
     sg.Txt('     Time (Month)', size=(13, 1), pad=(13, 2), key='time_tx'),
     sg.Drop(mnths_tx,
             size=(8, 1),
             font=("Helvetica", 12),
             pad=(12, 1),
             key='mnth'),
     sg.Stretch()
 ],
 [sg.Text('', key='name', size=(18, 1), pad=(12, 2), visible=False)],
 [
     sg.Button('Generate\nrecommendations',
               size=(20, 1.5),
               pad=(20, 3),
Esempio n. 7
0
pytesseract.pytesseract.tesseract_cmd = resource_path(
    r"Tesseract-OCR\tesseract.exe")

aod = 0
monitor_number = 0

sg.ChangeLookAndFeel("LightGreen")
layout = [
    [
        sg.Text("Amount of Deocs"),
        sg.Input(key="amountInput", tooltip="Tip: 50 per page")
    ],
    [
        sg.Text("Select Monitor MHW is on (default 1)"),
        sg.Drop(values=(1, 2, 3, 4), key="dropdown")
    ],
    [
        sg.Button(" Default 16:9 Region ",
                  tooltip="Use this if you have a 16:9 monitor",
                  key="defaultButton"),
        sg.Button(
            " Select Custom Region ",
            tooltip=
            "Use this if your monitor is not 16:9 or the default doesnt work, drag to make box, \"w\" to confirm ",
            key="customButton"),
        sg.Button(
            " Start Screenshots (5s delay to alt-tab) ",
            tooltip=
            "You will have 5 seconds to alt-tab into MHW after you press this, make sure you're on your first deco page.",
            key="startButton")