From 495bdb5eec603c1a6d6443a28352b7d74d7a3014 Mon Sep 17 00:00:00 2001 From: MikeTheWatchGuy Date: Thu, 18 Oct 2018 18:41:41 -0400 Subject: [PATCH] pysimplegui-exemaker --- exemaker/pysimplegui-exemaker/__init__.py | 1 + .../pysimplegui-exemaker.py | 77 +++++++++++++++++++ exemaker/readme.md | 27 +++++++ exemaker/setup.py | 27 +++++++ 4 files changed, 132 insertions(+) create mode 100644 exemaker/pysimplegui-exemaker/__init__.py create mode 100644 exemaker/pysimplegui-exemaker/pysimplegui-exemaker.py create mode 100644 exemaker/readme.md create mode 100644 exemaker/setup.py diff --git a/exemaker/pysimplegui-exemaker/__init__.py b/exemaker/pysimplegui-exemaker/__init__.py new file mode 100644 index 00000000..b2af88f0 --- /dev/null +++ b/exemaker/pysimplegui-exemaker/__init__.py @@ -0,0 +1 @@ +name = "pysimplegui-exemaker" diff --git a/exemaker/pysimplegui-exemaker/pysimplegui-exemaker.py b/exemaker/pysimplegui-exemaker/pysimplegui-exemaker.py new file mode 100644 index 00000000..0f6c5178 --- /dev/null +++ b/exemaker/pysimplegui-exemaker/pysimplegui-exemaker.py @@ -0,0 +1,77 @@ +import PySimpleGUI as sg +import subprocess +from shutil import copyfile +import shutil +import os + +def Launcher(): + sg.ChangeLookAndFeel('LightGreen') + + layout = [[sg.T('PyInstaller EXE Creator', font='Any 15')], + [sg.T('Source Python File'), sg.In(key='_sourcefile_', size=(45,1)), sg.FileBrowse(file_types=(("Python Files", "*.py"),))], + [sg.T('Icon File'), sg.In(key='_iconfile_', size=(45,1)), sg.FileBrowse(file_types=(("Icon Files", "*.ico"),))], + [sg.Frame('Output', font='Any 15',layout= [[sg.Output(size=(85, 15), font='Courier 10')]])], + [sg.ReadFormButton('Make EXE',bind_return_key=True), + sg.SimpleButton('Quit', button_color=('white','firebrick3')),]] + + window = sg.Window('PySimpleGUI EXE Maker', + auto_size_text=False, + auto_size_buttons=False, + default_element_size=(20,1), + text_justification='right') + + window.Layout(layout) + + # ---===--- Loop taking in user input --- # + while True: + (button, values) = window.Read() + if button is 'Quit' or button is None: + break # exit button clicked + + source_file = values['_sourcefile_'] + icon_file = values['_iconfile_'] + + icon_option = '-i "{}"'.format(icon_file) if icon_file else '' + source_path, source_filename = os.path.split(source_file) + workpath_option = '--workpath "{}"'.format(source_path) + dispath_option = '--distpath "{}"'.format(source_path) + specpath_option = '--specpath "{}"'.format(source_path) + folder_to_remove = os.path.join(source_path,source_filename[:-3]) + file_to_remove = os.path.join(source_path, source_filename[:-3]+'.spec') + command_line = 'pyinstaller -wF "{}" {} {} {} {}'.format(source_file, icon_option, workpath_option, dispath_option, specpath_option) + + if button is 'Make EXE': + out='' + try: + print(command_line) + print('Making EXE... this will take a while.. the program has NOT locked up...') + window.Refresh() + # print('Running command {}'.format(command_line)) + out, err = runCommand(command_line) + shutil.rmtree(folder_to_remove) + os.remove(file_to_remove) + print('**** DONE ****') + except: + sg.PopupError('Something went wrong', 'close this window and copy command line from text printed out in main window','Here is the output from the run', out) + print('Copy and paste this line into the command prompt to manually run PyInstaller:\n\n', command_line) + + +def runCommand(cmd, timeout=None): + """ run shell command + + @param cmd: command to execute + @param timeout: timeout for command execution + + @return: (return code from command, command output) + """ + p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + output = '' + + out, err = p.communicate() + p.wait(timeout) + + return (out, err) + +if __name__ == '__main__': + Launcher() + diff --git a/exemaker/readme.md b/exemaker/readme.md new file mode 100644 index 00000000..5bf9a2ce --- /dev/null +++ b/exemaker/readme.md @@ -0,0 +1,27 @@ +# PySimpleGUI-HowDoI + +## Introduction +This package contains a GUI front-end to PyInstaller. Use this tool to create EXE files from your python programs + + ![snag-0086](https://user-images.githubusercontent.com/13696193/46968655-c2103200-d081-11e8-926f-d5f977e726f3.jpg) + + + + +## Installing + +When you install PySimpleGUI-HowDoI, it will install the other components that it requires. To install, on windows, type this into a command prompt: + + pip install pysimplegui-exemaker + + +## PySimpleGUI Project + +This program was built as a sample application of the PySimpleGUI GUI Framework. + + +## Running the program + +After your pip install, type this into your command prompt: + + python -m pysimplegui-exemaker.pysimplegui-exemaker diff --git a/exemaker/setup.py b/exemaker/setup.py new file mode 100644 index 00000000..128ba418 --- /dev/null +++ b/exemaker/setup.py @@ -0,0 +1,27 @@ +import setuptools + +with open("README.md", "r") as fh: + long_description = fh.read() + +setuptools.setup( + name="pysimplegui-exemaker", + version="1.0.0", + author="PySimpleGUI.org", + author_email="info@PySimpleGUI.org", + description="A GUI Front-end to PyInstaller", + long_description=long_description, + long_description_content_type="text/markdown", + install_requires=['PyInstaller', 'pysimplegui'], + url="https://github.com/MikeTheWatchGuy/PySimpleGUI", + packages=setuptools.find_packages(), + classifiers=[ + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "License :: OSI Approved :: MIT License", + "Operating System :: Microsoft :: Windows ", + ], +) \ No newline at end of file