Lots of fixes to the Make Shortcut, checked in icon for shortcut maker demo

This commit is contained in:
PySimpleGUI 2021-10-18 19:09:26 -04:00
parent 75610f9263
commit 89339c86a4
2 changed files with 126 additions and 31 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -5,38 +5,56 @@ import os
""" """
Demo Program = Make Windows Shortcut Demo Program = Make Windows Shortcut
Creates a shortcut to your python file. Creates a shortcut to your python file (or EXE file or anything that you want to make a shortcut to)
Input just the .PY or .PYW file Input just the .PY or .PYW file
or... or...
Optionally Add: Optionally Add:
- The interpreter to use - The interpreter to use
- An icon for your shortcut - An icon for your shortcut
- A new name for the shortcut that's different than your Python filename - A new name for the shortcut
Copyright 2021 PySimpleGUI Copyright 2021 PySimpleGUI
""" """
'''
MM""""""""`M
MM mmmmmmmM
M' MMMM .d8888b. 88d888b. 88d888b. dP dP
MM MMMMMMMM 88' `88 88' `88 88' `88 88 88
MM MMMMMMMM 88. .88 88 88. .88 88. .88
MM MMMMMMMM `88888P' dP 88Y888P' `8888P88
MMMMMMMMMMMM 88 .88
dP d8888P
.8888b oo dP
88 " 88
88aaa dP 88 .d8888b. .d8888b.
88 88 88 88ooood8 Y8ooooo.
88 88 88 88. ... 88
dP dP dP `88888P' `88888P'
'''
def create_shortcut_for_python_file(arguments='', target='', icon='', new_name=''):
def create_shortcut(path, target='', icon=''):
""" """
Create a shortcut for a given target filename Create a shortcut for a given target filename
:param path str: full path and filename to make link to :param arguments str: full arguments and filename to make link to
:param target str: what to launch (e.g. python) :param target str: what to launch (e.g. python)
:param icon str: .ICO file :param icon str: .ICO file
:return: filename of the created shortcut file :return: filename of the created shortcut file
:rtype: str :rtype: str
""" """
filename, ext = os.path.splitext(path) filename, ext = os.path.splitext(arguments)
working_dir = os.path.dirname(filename) working_dir = os.path.dirname(target)
shell = Dispatch('WScript.Shell') shell = Dispatch('WScript.Shell')
shortcut_filename = filename + ".lnk" if new_name:
shortcut_filename = new_name + ".lnk"
else:
shortcut_filename = filename + ".lnk"
shortcut_filename = os.path.join(os.path.dirname(arguments), shortcut_filename)
shortcut = shell.CreateShortCut(f'{shortcut_filename}') shortcut = shell.CreateShortCut(f'{shortcut_filename}')
target_path = f'{target}' shortcut.Targetpath = str(target)
shortcut.Targetpath = target_path shortcut.Arguments = f'"{arguments}"'
shortcut.Arguments = f'"{path}"'
shortcut.WorkingDirectory = working_dir shortcut.WorkingDirectory = working_dir
if icon == '': if icon == '':
pass pass
@ -46,44 +64,121 @@ def create_shortcut(path, target='', icon=''):
return shortcut_filename return shortcut_filename
'''
MM""""""""`M dP dP
MM mmmmmmmM 88 88
M' MMMM .d8888b. 88d888b. .d8888b. d8888P 88d888b. .d8888b. 88d888b.
MM MMMMMMMM 88' `88 88' `88 88' `88 88 88' `88 88ooood8 88' `88
MM MMMMMMMM 88. .88 88 88. .88 88 88 88 88. ... 88
MM MMMMMMMM `88888P' dP `88888P' dP dP dP `88888P' dP
MMMMMMMMMMMM
.8888b oo dP
88 " 88
88aaa dP 88 .d8888b. .d8888b.
88 88 88 88ooood8 Y8ooooo.
88 88 88 88. ... 88
dP dP dP `88888P' `88888P'
'''
def create_shortcut_exe_or_other(arguments='', target='', icon='', new_name=''):
"""
Create a shortcut for a given target filename
:param arguments str: full arguments and filename to make link to
:param target str: what to launch (e.g. python)
:param icon str: .ICO file
:return: filename of the created shortcut file
:rtype: str
"""
filename, ext = os.path.splitext(target)
working_dir = os.path.dirname(target)
shell = Dispatch('WScript.Shell')
if new_name:
shortcut_filename = new_name + ".lnk"
else:
shortcut_filename = filename + ".lnk"
shortcut_filename = os.path.join(os.path.dirname(target), shortcut_filename)
shortcut = shell.CreateShortCut(shortcut_filename)
shortcut.Targetpath = str(target)
shortcut.Arguments = f'"{arguments}"'
shortcut.WorkingDirectory = working_dir
if icon == '':
pass
else:
shortcut.IconLocation = icon
shortcut.save()
return shortcut_filename
def shortcut_exists(target, new_name=''):
filename, ext = os.path.splitext(target)
filename = new_name if new_name!='' else filename
shortcut_filename = filename + ".lnk"
shortcut_filename = os.path.join(os.path.dirname(target), shortcut_filename)
print('looking for exists filename', shortcut_filename)
return os.path.exists(shortcut_filename)
def shortcut_delete(target, new_name=''):
filename, ext = os.path.splitext(target)
filename = new_name if new_name!='' else filename
shortcut_filename = filename + ".lnk"
shortcut_filename = os.path.join(os.path.dirname(target), shortcut_filename)
os.remove(shortcut_filename)
'''
oo
88d8b.d8b. .d8888b. dP 88d888b.
88'`88'`88 88' `88 88 88' `88
88 88 88 88. .88 88 88 88
dP dP dP `88888P8 dP dP dP
'''
def main(): def main():
sg.set_options(keep_on_top=True)
python_command = sg.execute_py_get_interpreter() python_command = sg.execute_py_get_interpreter()
sg.theme('dark grey 13') sg.theme('dark grey 13')
txt_size = 22 txt_size = 40
layout = [[sg.Text('Create a link to your Python file (Click Go or return key to start)', font='_ 15')], layout = [[sg.Text('Create a link to your Python file (Click Go or return key to start)', font='_ 15')],
[sg.T('Python file', s=txt_size), sg.Input(key='-IN FILE-'), sg.FileBrowse(file_types=(("Python Files", "*.py *.pyw *.PY *.PYW"),), )], [sg.T('Python (.PY/.PYW), EXE or other file - (absolute path)', s=txt_size), sg.Input(key='-IN FILE-'), sg.FileBrowse(file_types=(("Python Files", "*.py *.pyw *.PY *.PYW"),), )],
[sg.T('Icon file (optional)', s=txt_size), sg.Input(key='-ICON-'), sg.FileBrowse(file_types=(("Icon Files", "*.ico *.ICO",),), )], [sg.T('Icon file (optional)', s=txt_size), sg.Input(key='-ICON-'), sg.FileBrowse(file_types=(("Icon Files", "*.ico *.ICO",),), )],
[sg.T('Shortcut Name (optional)', s=txt_size), sg.Input(key='-SHORTCUT NAME-')], [sg.T('Shortcut Name (optional)', s=txt_size), sg.Input(key='-SHORTCUT NAME-')],
[sg.T('Python Command (optional)', s=txt_size), sg.Input(key='-PYTHON COMMAND-')], [sg.T('Python Command (optional)', s=txt_size), sg.Input(python_command, key='-PYTHON COMMAND-')],
[sg.Button('Go', bind_return_key=True), sg.Button('Exit')]] [sg.T('Arguments (optional)', s=txt_size), sg.Input(key='-ARGUMENTS-')],
[sg.Button('Create Shortcut', bind_return_key=True), sg.Button('Exit')]]
window = sg.Window('Create Shortcut To Python File', layout, icon=main_icon, right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_VER_EXIT) window = sg.Window('Create Shortcut To Python File', layout, icon=main_icon, right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_VER_EXIT)
while True: while True:
event, values = window.read() event, values = window.read()
# print(event, values) # print(event, values)
if event == sg.WIN_CLOSED or event == 'Exit': if event in (sg.WIN_CLOSED, 'Exit'):
break break
if event == 'Go': if event == 'Create Shortcut':
try: infile = values['-IN FILE-'].lower()
if values['-PYTHON COMMAND-']: py_cmd = values['-PYTHON COMMAND-']
py_cmd = values['-PYTHON COMMAND-'] if shortcut_exists(infile, values['-SHORTCUT NAME-']):
if sg.popup_yes_no('The shortcut already exists. Do you want to overwrite it?') == 'Yes':
shortcut_delete(infile, values['-SHORTCUT NAME-'])
else: else:
py_cmd = python_command continue
if '.pyw' in values['-IN FILE-'].lower(): # if a .pyw file specified, use pythonw to launch it try:
if 'pythonw' not in py_cmd: if '.pyw' in infile or '.py' in infile:
py_cmd = py_cmd.replace('python.exe', 'pythonw.exe') if values['-PYTHON COMMAND-']:
shortcut_name = create_shortcut(values['-IN FILE-'], target=fr'{py_cmd}', icon=values['-ICON-']) if '.pyw' in values['-IN FILE-'].lower(): # if a .pyw file specified, use pythonw to launch it
if values['-SHORTCUT NAME-']: if 'pythonw' not in py_cmd:
new_shortcut_name = os.path.join(os.path.dirname(shortcut_name), values['-SHORTCUT NAME-'] + '.lnk') py_cmd = py_cmd.replace('python.exe', 'pythonw.exe')
os.rename(shortcut_name, new_shortcut_name) if py_cmd:
shortcut_name = new_shortcut_name shortcut_name = create_shortcut_for_python_file(target=fr'{py_cmd}', arguments=values['-IN FILE-'], icon=values['-ICON-'], new_name=values['-SHORTCUT NAME-'])
window.close() else:
shortcut_name = create_shortcut_exe_or_other(target=values['-IN FILE-'], icon=values['-ICON-'], new_name=values['-SHORTCUT NAME-'])
else:
shortcut_name = create_shortcut_exe_or_other(target=infile, arguments=values['-ARGUMENTS-'], icon=values['-ICON-'], new_name=values['-SHORTCUT NAME-'])
choice = sg.popup('Done!', 'Created shortcut:', shortcut_name, custom_text=('Take me there', 'Close')) choice = sg.popup('Done!', 'Created shortcut:', shortcut_name, custom_text=('Take me there', 'Close'))
if choice == 'Take me there': if choice == 'Take me there':
sg.execute_command_subprocess(r'explorer.exe', os.path.dirname(shortcut_name)) sg.execute_command_subprocess(r'explorer.exe', os.path.dirname(shortcut_name))
break
except Exception as e: except Exception as e:
sg.popup_error('Error encountered', e) sg.popup_error('Error encountered', e)
elif event == 'Edit Me': elif event == 'Edit Me':