Esempio n. 1
0
def no_internet_connection():
    """

    Produce a popup window that notifies the user of AdaHub's lack of ability to reliably establish a connection
    outside of the local network.

    Returns:
        None

    """

    log = getLogger(f'{PROG}.{__name__}')
    log.debug('Received request to produce popup to notify user that they attempted to activate a feature that has '
              'not yet been implemented.')

    statement = 'AdaHub was unable to find an internet connection.\n' \
                '\nPlease check your connection.'

    Qt.PopupError(statement, title=f'{title_prefix}', keep_on_top=True)
Esempio n. 2
0
def not_yet_implemented(feature=None):
    """

        Produce a popup window that notifies the user that they have attempted to activate a feature that is not yet
        implemented. This error would usually occur after attempting to activate a feature that has an
        interactive placeholder for a part of the program that has not yet had it's code written, etc.

        Returns:
            None

    """

    if feature is not None:
        feature = feature.strip()
    else:
        feature = 'This feature'

    statement = str(f'{feature} is not yet implemented.')

    Qt.PopupError(statement, title=f'{title_prefix} | Not Yet Implemented', keep_on_top=True)
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
                window["in_preparo"].Update("")
                window["in_ingred_list"].Update("")
                window["in_cat"].Update("")
                window["in_cat_list"].Update("")
                window.Refresh()
                sg.PopupAutoClose(
                    "Receita inserida com sucesso!",
                    keep_on_top=True,
                    no_titlebar=True,
                    auto_close=True,
                    auto_close_duration=2,
                    button_type=POPUP_BUTTONS_NO_BUTTONS,
                )
            except Exception as e:
                sg.PopupError(
                    f"ERRO. Não foi possível inserir a receita. Por favor verifique os campos preenchidos.\nMotivo:\n{e}",
                    title="ERRO",
                )
        else:
            sg.PopupError(
                "ERRO: os seguintes erros foram encontrados:\n{0}".format(
                    "\n".join(ERROS), title="ERRO"
                )
            )

    if event == "in_list_ingred":
        cur = conn.cursor()
        SQL_INGREDIENTES = cur.execute("select ingredientes from receitas")
        LISTA_INGREDIENTES = []
        for ING in SQL_INGREDIENTES:
            if ING[0]:
                INGS = [
Esempio n. 5
0
def get_settings(min_df_val, max_df_val, label_words_val, folder_val,
                 stopwords_path):
    layout2 = [[sg.Text('Parameter Settings', font=("Ariel", 12))],
               [
                   sg.Text('min_df', size=(15, 1), font=("Ariel", 12)),
                   sg.InputText(str(min_df_val),
                                font=("Ariel", 12),
                                key='min_df_val')
               ],
               [
                   sg.Text('max_df', size=(15, 1), font=("Ariel", 12)),
                   sg.InputText(str(max_df_val),
                                font=("Ariel", 12),
                                key='max_df_val')
               ],
               [
                   sg.Text('Number of Label Words',
                           size=(15, 1),
                           font=("Ariel", 12)),
                   sg.InputText(str(label_words_val),
                                font=("Ariel", 12),
                                key='label_words_val')
               ],
               [
                   sg.Txt('Output Folder:', size=(10, 1), font=("Ariel", 12)),
                   sg.InputText(str(folder_val),
                                size=(30, 1),
                                font=("Ariel", 12),
                                key='folder_val'),
                   sg.FolderBrowse(font=("Ariel", 12))
               ],
               [
                   sg.Txt('Stopwords file:', size=(10, 1), font=("Ariel", 12)),
                   sg.InputText(str(stopwords_path),
                                size=(30, 1),
                                font=("Ariel", 12),
                                key='stopwords_path'),
                   sg.FileBrowse(font=("Ariel", 12))
               ],
               [sg.Submit(font=("Ariel", 12)),
                sg.Cancel(font=("Ariel", 12))]]

    settingswdw = sg.Window('Settings', grab_anywhere=False,
                            resizable=False).Layout(layout2)

    #settingswdw.Refresh()

    while True:  # Event Loop
        event, values = settingswdw.Read()
        print(event, values)
        if event is None or event == 'Cancel':
            print('None or Exit event')
            break
        elif event == 'Submit':

            if not RepresentsInt(values['min_df_val']) or not RepresentsInt(
                    values['max_df_val']) or not RepresentsInt(
                        values['label_words_val']):
                sg.PopupError('Values must be integers, please correct.')
            elif not os.path.exists(folder_val) or not os.path.isdir(
                    folder_val):
                sg.PopupError('Folder not valid, please correct.')
            elif not os.path.exists(stopwords_path) or not os.path.isfile(
                    stopwords_path):
                sg.PopupError('Stopwords file not valid, please correct.')
            else:
                min_df_val = values['min_df_val']
                max_df_val = values['max_df_val']
                label_words_val = values['label_words_val']
                folder_val = values['folder_val']
                stopwords_path = values['stopwords_path']
                #print('min_df_val: ' + min_df_val + '  max_df_val:' + max_df_val + '  label_words_val:' + label_words_val + '  output_folder_val: ' + folder_val)

                break

    print('min_df_val: ' + min_df_val + '  max_df_val:' + max_df_val +
          '  label_words_val:' + label_words_val + '  output_folder_val: ' +
          folder_val + '  stopwords_path: ' + stopwords_path)
    settingswdw.Close()
    return min_df_val, max_df_val, label_words_val, folder_val, stopwords_path
Esempio n. 6
0
		if song.artist and song.title:
			song.download_lyrics()

		# Show immidiate log in console
		else:
			# If title was present, use that
			if song.title:
				print(song.title, 'was ignored.', song.error)
			# else use audio file path
			else:
				print(song.path, 'was ignored.', song.error)


	print('\nBuilding log...')
	Song.log_results(song_list)
	print(
		'{songs} songs, {tagged} tagged, {files} lyric files, {existing} existing, {errors} errors'.format(
			songs = len(song_list),
			tagged = Song.lyrics_saved_to_tag_count,
			files = Song.lyrics_saved_to_file_count,
			existing = Song.lyrics_existing_count,
			errors = Song.lyrics_errors_count
		)
	)
	print('FINISHED')

	sg.Popup('All Done!', 'See the debug screen for more details.')
else:
	sg.PopupError("No music directory selected. Quitting without searching.", title="No Directory")

Esempio n. 7
0
            configList[5] = comm.updateOutput()
            comm.runOblige(configList)
            pop.Close()
            sessionDic = {
                "id": str(updateSessionId(sessionsList)),
                "name": configList[5],
                "configList": configList,
                "pwadList": pwadList
            }
            sessionsList = addSession(sessionsList, sessionDic)
            saveSessions(sessionsList)
            sessionsList = loadSessions()
            setSessionsValues(formatSessionsValues(sessionsList))
            setConfigValues(configList, pwadList)
        elif launchReady is False:
            sg.PopupError("Cannot Create Game with missing Config",
                          keep_on_top=True)

    # Event Actions to Play a Game

    if event == "Play":
        configList, pwadList = getConfigValues()
        launchReady = True
        launchCheck = 0
        while launchCheck <= 5:
            if configList[launchCheck] is "" and launchCheck is not 4:
                launchReady = False
            launchCheck += 1
        if launchReady is True:
            comm.runSourcePort(configList, pwadList)
        elif launchReady is False:
            sg.PopupError("Cannot Create Game with missing Config",
Esempio n. 8
0
                       size=(500, 600),
                       icon=c_icon,
                       alpha_channel=.8,
                       no_titlebar=True)
    print = window['output'].print

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

        if not fetched:
            data = fetch_data()

        if fetched:
            window['inspect_bttn'].Update(visible=True)
            window.refresh()

        if event is None or event == 'close_bttn':
            window.close()
            exit()

        if event == 'refresh_bttn':
            fetched = False

        if event == 'inspect_bttn':
            Qt.PopupError('\nThis feature is not yet implemented!\n',
                          title='Not yet implemented!',
                          keep_on_top=True,
                          icon=err_icon)

fetch_data()
Esempio n. 9
0
def getErrorWindow(text="Error"):
    sg.PopupError(text)
Esempio n. 10
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. 11
0
import csv

# sg.PopupQuickMessage('Loading...', auto_close_duration=4, keep_on_top=True, location=(800,800))
# sg.Popup('This is a normal blocking popup','It was called after the PopupQuickMessage call.', location=(1000,800))

filename = r'C:\Python\PycharmProjects\GooeyGUI\ProgrammingClassExamples\Win10 versions\AFL2018 (sorted pts and %).csv'
# filename = sg.PopupGetFile('filename to open', no_window=False, file_types=(("CSV Files","*.csv"),))
# --- populate table with file contents --- #
data = []
if filename is not None:
    with open(filename, "r") as infile:
        reader = csv.reader(infile)
        try:
            data = list(reader)  # read everything else into a list of rows
        except:
            sg.PopupError('Error reading file')
            sys.exit(69)
else:
    sys.exit()

# sg.SetOptions(element_padding=(0,0))
headings = [data[0][x] for x in range(len(data[0]))]
print(data)
layout = [[sg.Table(values=data[1:][:], headings=headings, max_col_width=25,
                        auto_size_columns=True, display_row_numbers=True, change_submits=True, bind_return_key=True, justification='right', num_rows=20, alternating_row_color='lightblue', key='_table_', text_color='black')],
          [sg.Button('Read'), sg.Button('Double')],
          [sg.T('Read = read which rows are selected')],[sg.T('Double = double the amount of data in the table')]]
window = sg.Window('Table', grab_anywhere=False, resizable=True).Layout(layout)

window.FindElement('_table_').StartingRowNumber = 1
window.FindElement('_table_').RowHeaderText = 'Row'