New PyCharm launcher demo
This commit is contained in:
parent
57b95d3ab6
commit
4442970aab
|
@ -0,0 +1,93 @@
|
|||
import PySimpleGUI as sg
|
||||
import subprocess
|
||||
|
||||
"""
|
||||
Demo mini-PyCharm "favorites" launcher
|
||||
Open a python file for editing using a small window that sits in the corner of your desktop
|
||||
|
||||
Copyright 2020 PySimpleGUI.org
|
||||
"""
|
||||
|
||||
# ---------------------------- Items for you to edit specific to your setup --------------------
|
||||
LOCATION = (2340, 1240) # where the window should be located
|
||||
TRANSPARENCY = .7
|
||||
|
||||
# A list of the files to edit
|
||||
PSG = r'C:\Python\PycharmProjects\PySimpleGUI\PySimpleGUI.py'
|
||||
PSGQT = r'C:\Python\PycharmProjects\PySimpleGUI\PySimpleGUIQt.py'
|
||||
PSGWX = r'C:\Python\PycharmProjects\PySimpleGUI\PySimpleGUIWx.py'
|
||||
PSGWEB = r'C:\Python\PycharmProjects\PySimpleGUI\PySimpleGUIWeb.py'
|
||||
|
||||
# The command that will be executed that causes a file to be opened in PyCharm
|
||||
PYCHARM = r"C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\bin\pycharm.bat"
|
||||
|
||||
# Dictionary of buttons to display and their corresponding file to open in PyCharm
|
||||
button_dict = {'PySimpleGUI': PSG,
|
||||
'PySimpleGUIQt': PSGQT,
|
||||
'PySimpleGUIWx': PSGWX,
|
||||
'PySimpleGUIWeb': PSGWEB,
|
||||
'This Progam': __file__, }
|
||||
|
||||
# ----------------------------- The main program -----------------------------
|
||||
def mini_launcher():
|
||||
"""
|
||||
The main program. Creates the Window and runs the event loop
|
||||
"""
|
||||
|
||||
sg.theme('dark')
|
||||
sg.set_options(border_width=0)
|
||||
|
||||
# layout is built rather than a static definion
|
||||
# starting with a blank line. This will give you a place to "grab" the window to move it around on the screen
|
||||
layout = [[sg.Text(' ' * 10, background_color='black')]]
|
||||
|
||||
# add the buttons to the layout
|
||||
for button_text in button_dict:
|
||||
layout += [[sg.Button(button_text)]]
|
||||
|
||||
# complete the layout with a text "X" that will generate an event when clicked
|
||||
layout += [[sg.T('❎', background_color='black', enable_events=True, key='Exit')]]
|
||||
|
||||
# Create the Window
|
||||
window = sg.Window('Script launcher', layout, no_titlebar=True, grab_anywhere=True, keep_on_top=True, element_padding=(0, 0), default_button_element_size=(20, 1), location=LOCATION, auto_size_buttons=False, use_default_focus=False, alpha_channel=TRANSPARENCY, background_color='black', )
|
||||
|
||||
while True: # The Event Loop
|
||||
event, values = window.read()
|
||||
if event == 'Exit' or event == sg.WINDOW_CLOSED:
|
||||
break
|
||||
|
||||
file_to_edit = button_dict.get(event) # Use button to find associated filename
|
||||
try:
|
||||
execute_command_blocking(PYCHARM, file_to_edit) # launch PyCharm
|
||||
except Exception as e:
|
||||
sg.Print(f'Got an exception {e} trying to open in PyCharm this file:', file_to_edit)
|
||||
|
||||
|
||||
def execute_command_blocking(command, *args):
|
||||
"""
|
||||
Creates a subprocess using supplied command and arguments.
|
||||
Will not return until the process completes running
|
||||
:param command: The command (full path) to execute
|
||||
:param args: a tuple of arguments
|
||||
:return: string with the output from the command
|
||||
|
||||
"""
|
||||
print(f'Executing {command} with {args}')
|
||||
expanded_args = [a for a in args]
|
||||
try:
|
||||
sp = subprocess.Popen([command, expanded_args], shell=True,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
out, err = sp.communicate()
|
||||
if out:
|
||||
print(out.decode("utf-8"))
|
||||
if err:
|
||||
print(err.decode("utf-8"))
|
||||
except Exception as e:
|
||||
sg.Print(f'execute got exception {e}')
|
||||
out = ''
|
||||
return out
|
||||
|
||||
|
||||
# ----------------------------- When program is first started -----------------------------
|
||||
if __name__ == '__main__':
|
||||
mini_launcher()
|
Loading…
Reference in New Issue