Pysimplegui: [PyInstaller рд╕рдорд╕реНрдпрд╛] рдЙрдкрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдЕрдХреНрддреВре░ 2019  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: PySimpleGUI/PySimpleGUI

рдореБрджреНрджреЛрдВ рдХрд╛ рдкреНрд░рдХрд╛рд░

рдХреАрдбрд╝рд╛

рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо

рд╡рд┐рдВрдбреЛрдЬ 7

рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг

3.5

PySimpleGUI рдкреЛрд░реНрдЯ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг

4.4.1

рдорд╣реАрдиреЛрдВ рдпрд╛ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЖрдкрдХрд╛ рдЕрдиреБрднрд╡ рд╕реНрддрд░

рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдиреБрднрд╡
1

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдиреБрднрд╡
7

рдкрд╣рд▓реЗ рдПрдХ рдФрд░ рдкрд╛рдпрдерди рдЬреАрдпреВрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ (tkiner, Qt, рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ (рд╣рд╛рдБ/рдирд╣реАрдВ рдареАрдХ рд╣реИ)?
рд╣рд╛рдВ

рдЖрдкрдиреЗ рдпреЗ рдЪрд░рдг рдкреВрд░реЗ рдХрд░ рд▓рд┐рдП рд╣реИрдВ:

  • [рд╣рд╛рдБ] рд╕рдорд╕реНрдпрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рдкрдврд╝реЗрдВ
  • [рд╣рд╛рдБ] рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ http://www.PySimpleGUI.org рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬрд╛ рдЧрдпрд╛
  • [ ] рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рд░реАрдбрдореА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬрд╛ рдЧрдпрд╛ рдпрджрд┐ PySimpleGUI (Qt, WX, Remi) рдирд╣реАрдВ рд╣реИ
  • [ ] рдРрд╕реЗ рдбреЗрдореЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рддрд▓рд╛рд╢ рдХреА рдЬреЛ рдЖрдкрдХреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рдорд╛рди рд╣реЛрдВ http://www.PySimpleGUI.com
  • [ ] рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ GitHub рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреЛрд░реНрдЯ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдбреЗрдореЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рднреА рд╣реИрдВ
  • [рд╣рд╛рдВ] рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЕрдкрдиреЗ рдбреАрдмрдЧрд░ рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓рд╛рдПрдВ (рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ)
  • [рд╣рд╛рдБ] рдореБрджреНрджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬрд╛ рдЧрдпрд╛ (рдЦреБрд▓рд╛ рдФрд░ рдмрдВрдж) рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдХреЛрдб рдпрд╛ рдЖрдВрд╢рд┐рдХ рдХреЛрдб рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдореИрдВ PySimpleGUI рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдБред рдЬрдм рдореИрдВ рдореЙрдбреНрдпреВрд▓ рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ exe рдореЗрдВ py рдкреИрдХ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рд╣рдореЗрд╢рд╛ рдиреАрдЪреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреА рддрд░рд╣ рдХреНрд░реИрд╢ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЕрдкрдиреА py рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реАрдзреЗ cmd рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реВрдБ, рддреЛ рдпрд╣ рдареАрдХ рд╣реИред рддреЛ рдХреГрдкрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдзрдиреНрдпрд╡рд╛рджред

рдУрдХреЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдВрдбреЛрдЬ 7 рдкрд░ рдПрдХреНрд╕рдИ рдлрд╛рдЗрд▓ рдХреНрд░реИрд╢:
enter image description here

SimpleDemoTestSubprocess.py:

import PySimpleGUI as sg
import subprocess


def runCommand(cmd, timeout=None):
    """ run shell command
    <strong i="38">@param</strong> cmd: command to execute
    <strong i="39">@param</strong> timeout: timeout for command execution
    <strong i="40">@return</strong>: (return code from command, command output)
    """

    prt('runCommand, cmd = ' + str(cmd))

    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    output = ''

    prt('runCommand, communicate')
    out, err = p.communicate()
    prt('runCommand, wait')
    p.wait(timeout)

    prt(out)
    prt(err)

    return (out, err)


def prt(self, *args, sep=' ', end='\n', file=None):
    print()
    print(self, *args, sep=' ', end='\r\n', file=None)


# All the stuff inside your window.
layout = [
    [sg.Text('Some text on Row 1')]
    , [sg.Text('Enter something on Row 2'), sg.InputText()]
    , [sg.Button('Ok'), sg.Button('Cancel')]
    # , [sg.PopupScrolled('Hello From PySimpleGUI!', 'This is the shortest GUI program ever!')]
]

# Create the Window
window = sg.Window('Window Title', layout)
# Event Loop to process "events" and get the "values" of the inputs
while True:
    event, values = window.read()
    if event in (None, 'Cancel'):  # if user closes window or clicks cancel
        break
    if event in (None, 'Ok'):  # if user closes window or clicks cancel
        runCommand("ls")
    print('You entered ', values[0])

window.close()

exe рдореЗрдВ рдкреИрдХреЗрдЬ py:

# https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_EXE_Maker.py

import PySimpleGUI as sg
import subprocess
from shutil import copyfile
import shutil
import os

def prt(self, *args, sep=' ', end='\n', file=None):
    print()
    print(self, *args, sep=' ', end='\r\n', file=None)

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=(65, 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 in ('Quit', 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 == 'Make EXE':
            try:
                prt('source_file: ' + str(source_file))
                prt('Making EXE... this will take a while.. the program has NOT locked up...')
                window.Refresh()

                prt('window.Refresh')
                window.Refresh()
                prt('Running command: {}'.format(command_line))
                runCommand(command_line)
                shutil.rmtree(folder_to_remove)
                os.remove(file_to_remove)
                prt('**** DONE ****')
            except Exception as e:
                # sg.PopupError('Something went wrong')
                prt("Launcher, Exception = " + e)


def runCommand(cmd, timeout=None):
    """ run shell command
    <strong i="6">@param</strong> cmd: command to execute
    <strong i="7">@param</strong> timeout: timeout for command execution
    <strong i="8">@return</strong>: (return code from command, command output)
    """

    prt('runCommand, cmd = ' + str(cmd))

    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    output = ''

    prt('runCommand, communicate')
    out, err = p.communicate()
    prt('runCommand, wait')
    p.wait(timeout)

    prt(out)
    prt(err)

    return (out, err)

if __name__ == '__main__':
    Launcher()

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛:

рдкреА = рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ред рдкреЙрдкреЗрди (рд╕реАрдПрдордбреА, рд╢реЗрд▓ = рдЯреНрд░реВ, рд╕реНрдЯрдбрдЖрдЙрдЯ = рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ред рдкрд╛рдЗрдк, рд╕реНрдЯреЗрдбрд░ = рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ред рдПрд╕рдЯреАрдбреАрдУрдпреВрдЯреА, рд╕реНрдЯрдбрд┐рди = рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ред рдкрд╛рдЗрдк)

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ PyInstaller рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ EXE рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╕рдм рдареАрдХ рдЪрд▓рддрд╛ рд╣реИред рдЕрддреАрдд рдореЗрдВ рдореИрдВ PyInstaller рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд▓реЙрдиреНрдЪрд░ рдбреЗрдореЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЧрд┐рдЯрд╣рдм рдкрд░ EXE рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛рдпрд╛ рд╣реВрдВред

рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ рдХреЙрд▓ рдФрд░ PyInstaller рдХреА рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдпрд╛ рдХрд╣реАрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВред

рдпрджрд┐ рдЖрдк рд╕рднреА PySimpleGUI рдХреЛрдб рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдЕрдкрдиреА EXE рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ рдХреЙрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдХрдбрд╝реА рдХреЛрдбрд┐рдВрдЧ рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

"рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдПрдХ EXE рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╕рдм рдареАрдХ рдЪрд▓рддрд╛ рд╣реИ"
рд╣рд╛рдБ рдпрд╣реА рд╣реИред

"рдпрджрд┐ рдЖрдк рд╕рднреА PySimpleGUI рдХреЛрдб рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА EXE рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ рдХреЙрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ?"
рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рд╕рднреА PySimpleGUI рдХреЛрдб рд╣рдЯрд╛ рджрд┐рдП рд╣реИрдВ, рдФрд░ рдпрд╣ рдЕрднреА рднреА рдХреНрд░реИрд╢ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ PySimpleGUI рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ :)

рддреЛ рдХреНрдпрд╛ PySimpleGUI рдиреЗ pyinstaller рдХреЗ рдмрдЬрд╛рдп рдЕрдиреНрдп EXE рдкреИрдХреЗрдЬрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛?

рдЗрд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛:

рдкреА = рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ред рдкреЙрдкреЗрди (рд╕реАрдПрдордбреА, рд╢реЗрд▓ = рдЯреНрд░реВ, рд╕реНрдЯрдбрдЖрдЙрдЯ = рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ред рдкрд╛рдЗрдк, рд╕реНрдЯреЗрдбрд░ = рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ред рдПрд╕рдЯреАрдбреАрдУрдпреВрдЯреА, рд╕реНрдЯрдбрд┐рди = рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ред рдкрд╛рдЗрдк)

рдзрдиреНрдпрд╡рд╛рдж!!!!!!!!!

рдореИрдВ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╕рдордп рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рди рдХреЗрд╡рд▓ рдЦреБрджрд╛рдИ рдФрд░ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╡рд╛рдкрд╕ рдЖрдХрд░ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рднреА рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╣реБрдд рд╣реА рд╕рд░рд╛рд╣рдиреАрдп!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

lucasea777 picture lucasea777  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DKatarakis picture DKatarakis  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yogesh-aggarwal picture yogesh-aggarwal  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

OPMUSER picture OPMUSER  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

xuguojun168 picture xuguojun168  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ