Как сделать исполняемый файла python, который отрывает другие python файлы?

У меня есть код

import PySimpleGUI as sg
import subprocess

sg.theme('DarkBlue')

layout = [[sg.Button('Кнопка 1', expand_x=True, font=('Courier 10', 14))],
          [sg.Button('Кнопка 2', expand_x=True, font=('Courier 10', 14))],
          [sg.Button('Кнопка 3', expand_x=True, font=('Courier 10', 14))],
          [sg.Button('Кнопка 4', expand_x=True, font=('Courier 10', 14))]]

window = sg.Window("Программа с кнопками", layout)

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

    if event == sg.WINDOW_CLOSED:
        break
    elif event == "Кнопка 1":
        subprocess.Popen(['python', "cnopka1.py"])
    elif event == "Кнопка 2":
        subprocess.Popen(['python', "cnopka2.py"])
    elif event == "Кнопка 3":
        subprocess.Popen(['python', "cnopka3.py"])
    elif event == "Кнопка 4":
        subprocess.Popen(['python', "cnopka4.py"])

window.close()

Пытаюсь его сделать исполняемым при помощи auto-py-to-exe и pyinstaller. Файл открывается нормально, но кнопки не работают. При нажатии на кнопки, программа вылетает. При нажатии на кнопки должны запускать интерфейсы других python файлов с интерфейсами. Возможно ли вообще сделать исполняемый файл для python файла, который в себе содержит еще другие python файлы?


Ответы (1 шт):

Автор решения: Chorkov

Лучше импортируйте код из других файлов как модули:

cnopka1.py

...
def main():
    # сюда переносим код, который ранее был на уровне модуля
    ...

# оставляем возможность запустить файл отдельно, для упрощения отладки.
if __name__ == '__main__' :
    main() 

main.py

...
import cnopka1
import cnopka2
import cnopka3
...


...
    elif event == "Кнопка 1":
        cnopka1.main()
    elif event == "Кнопка 2":
        cnopka2.main()
...

→ Ссылка