Python GUI runs separate scripts through subprocess calls, but doesn’t work when packaged as .exe

  Kiến thức lập trình

I have an interface I’ve created called interface.py that runs a script based on the press of a button…

def submit_action(selected_item):
    values = list(item_to_value[selected_item])
    selected_month = month_var.get()
    
    # Check the state of the checkboxes and assign values
    invoice_value = "1" if invoice_var.get() else "0"
    loader_value = "1" if loader_var.get() else "0"

    # Append the checkbox values to the values list
    values.append(invoice_value)
    values.append(loader_value)
    values.append(selected_month)  # Append the selected month

    if selected_item in ["Type 1", "Item 2", "Item 3"]:
        subprocess.run(["py", "gen_simple_management_fee.py"] + values)
    elif selected_item in ["Type 2", "Item 2", "Item 3"]:
        subprocess.run(["py", "gen_no_split_variant_2.py"] + values)
    elif selected_item in ["Type 3", "Item 5"]:
        subprocess.run(["py", "gen_fixed_split.py"] + values)
    elif selected_item in ["Type 4", "Item 5"]:
        subprocess.run(["py", "gen_daily_validations.py"] + values)    
    elif selected_item in ["Type 5", "Type 6"]:
        subprocess.run(["py", "gen_variable_split.py"] + values)
    elif selected_item in ["Type 7", "Type 8"]:
        subprocess.run(["py", "gen_variable_split_variant_2.py"] + values)
    elif selected_item in ["Type 9", "Type 10"]:
        subprocess.run(["py", "gen_no_split.py"] + values)

I also send a set of values across to the other scripts using a list that gets sent along with the subprocess call:

item_to_value = {
    "Type 1": ("Information 1", "information 2", "placeholder", "placeholder", "placeholder", "placeholder"),
    "Type 2": ("Information 1", "Information 2", "placeholder", "placeholder", "placeholder", "placeholder"),

...

The script gets run, drawing on the subprocess information passed:

import pandas as pd
import sys
import os
import tkinter as tk
from tkinter import filedialog, Tk
import customtkinter as ctk
from PIL import Image

corresponding_value = sys.argv[1]
print(f"Running with corresponding value: {corresponding_value}")

billing_project_name = sys.argv[6]
selected_month = sys.argv[-1]
selected_month = str(selected_month)

...

When I try to package this as an .exe through pyinstaller, I either get the issue that the main interface.py file re-runs and displays another iteration of the gui, or the exe can’t find the various scripts to run.

How can I make this work as an executable file? I want to avoid having to re-jig the code to run as multiprocessing instead of subprocess – unless it’s the only way…

If there’s a way to create an entrypoint script that runs the interface.py, then passes the correct variables and script to run, how would I do that? Any other ideas would be appreciated.

Theme wordpress giá rẻ Theme wordpress giá rẻ Thiết kế website

LEAVE A COMMENT