MacOs Tkinter - App terminating 'Invalid parameter not satisfying: aString != nil'

155 views Asked by At

When im launching my app via CLI, it works without issue

./org_chart.app/Contents/MacOS/org_chart

however when I launch via double click I met with the error

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: aString != nil'

I used py2app to build the app. Im not sure where to begin debugging this, if someone could point me in the right direction?

Thanks for your help!

here's the full code for the small app

import os, shutil
import tkinter as tk
from tkinter import filedialog, messagebox, Tk, Canvas, Entry, Text, Button, PhotoImage
from tkinter import font as tkFont

def build_org_chart():

    print("im making a chart")
  
    return 'Done chart created!'

if __name__ == "__main__":
    window = Tk()
    window.title("Org Chart Spreadsheet Generator")

    # Variables to store file paths
    window.geometry("1012x506")
    window.configure(bg = "#00403D")

    # Define the font properties
    my_font = tkFont.Font(family="Montserrat SemiBold", size=16, weight="normal")

    canvas = Canvas(
        window,
        bg = "#00403D",
        height = 506,
        width = 1012,
        bd = 0,
        highlightthickness = 0,
        relief = "ridge"
    )

    canvas.place(x = 0, y = 0)
    canvas.create_rectangle(
        308.0,
        0.0,
        1012.0,
        506.0,
        fill="#FFFFFF",
        outline="")

    canvas.create_text(
        320.0,
        18.0,
        anchor="nw",
        text="Org Chart",
        fill="#000000",
        font=("Montserrat Bold", 64 * -1)
    )

    window.resizable(False, False)
    window.mainloop()

Also now my app is so small its still crashing im thinking it could be something in the setup file too so ive added that code below

import os
from setuptools import setup

def list_files(directory):
    base_path = os.path.abspath(directory)
    paths = []
    for root, directories, filenames in os.walk(base_path):
        for filename in filenames:
            # Exclude .DS_Store files if you are on macOS
            if filename != '.DS_Store':
                paths.append(os.path.join(root, filename))
    return paths

# Your assets folder
assets_folder = 'assets'

# Listing all files in the assets folder
assets_files = list_files(assets_folder)

APP = ['org_chart_min.py']
DATA_FILES = [('assets', assets_files)]
OPTIONS = {
    'argv_emulation': True,

    'packages': ['pandas', 'openpyxl','xlsxwriter'],
        'plist': {
        'CFBundleName': '_org_chart',
        'CFBundleDisplayName': ' Org Chart',
        'CFBundleGetInfoString': "Create a spreadsheet that populates our Lucid org chart template",
        'CFBundleIdentifier': 'com.yourdomain.orgchart',
        'CFBundleVersion': '0.1',
        'CFBundleShortVersionString': '0.1',
        'NSRequiresAquaSystemAppearance': True
    },
    'iconfile': 'org_chart.icns',
}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)
3

There are 3 answers

7
simbullar On BEST ANSWER

I suppose you use pyinstaller. It works for mac and it will compile an UNIX file. Just use pip install pyinstaller and after that in directory of your script pyinstaller -F main.py. Rename your file as main.py and it should compile one UNIX file. -F flag compiles it in one file. It works perfectly!

1
user16930239 On

run this on terminal

rm ~/Library/Containers/com.apple.Safari/Data/Library/Saved\ Application\ State/com.apple.Safari.savedState/windows.plist

This will reset Safari saved state, which is most probably the issue here.

1
Philippe On

You should remove the line :

'argv_emulation': True,

From : https://py2app.readthedocs.io/en/stable/options.html

WARNING: Do no use this option when the program uses a GUI toolkit. The emulator tends to confuse GUI toolkits, and most GUI toolkits have APIs to react to these events at runtime (for example to open a file when your program is already running).