auto-py-to-exe doesn't properly convert py to exe. keep getting warnings

29 Views Asked by At

Im trying to get auto-py-to-exe to make an executable from a py file. Since english is not my first language i do not realy understand what te do and what to put where. Google is not much of a help either. In the top of my file i have this:

import tkinter as tk
from tkinter import ttk
from tkcalendar import DateEntry
from ics import Calendar as ICalendar
from datetime import date
import re
import pickle
import os

when i try to us auto-py-to-exe or pyinstaller i keep getting warnings like these: 419084 WARNING: Library not found: could not resolve 'api-ms-win-crt-runtime-l1-1-0.dll'

I do not understand what i am seposed to do to get it to work properly. I think i need to make a reference to the missing dll en pyd files, but how and where i do not know.

this is my full code:

import tkinter as tk
from tkinter import ttk
from tkcalendar import DateEntry
from ics import Calendar as ICalendar
from datetime import date
import re
import pickle
import os

class CalendarApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Evenementen Kalender")

        self.selected_date = date.today()

        # Kalenderwidget
        self.cal_frame = ttk.Frame(self.root)
        self.cal_frame.pack(pady=10)

        self.cal_label = ttk.Label(self.cal_frame, text="Selecteer een datum:")
        self.cal_label.grid(row=0, column=0, columnspan=3)

        self.cal = DateEntry(self.cal_frame, year=self.selected_date.year, month=self.selected_date.month, day=self.selected_date.day,
                             locale='nl_NL', date_pattern='dd-mm-y')  # Set the date pattern here
        self.cal.grid(row=1, column=0, columnspan=3)

        self.cal.bind("<<DateEntrySelected>>", self.update_date)

        # Evenementenframe
        self.event_frame = ttk.Frame(self.root)
        self.event_frame.pack(pady=10)

        # Maak de Treeview-widget
        self.tree = ttk.Treeview(self.event_frame, columns=("Datum", "Starttijd", "Eindtijd", "Evenement", "Locatie", "Attendees"), show="headings", selectmode="browse", height=15)
        self.tree.grid(row=1, column=0, columnspan=3, pady=10)

        self.tree.heading("#1", text="Datum")
        self.tree.heading("#2", text="Starttijd")
        self.tree.heading("#3", text="Eindtijd")
        self.tree.heading("#4", text="Evenement")
        self.tree.heading("#5", text="Locatie")
        self.tree.heading("#6", text="Attendees")

        # Stel de breedte van de kolommen in
        self.tree.column("#1", width=100)
        self.tree.column("#2", width=80)
        self.tree.column("#3", width=80)
        self.tree.column("#4", width=200)
        self.tree.column("#5", width=80)
        self.tree.column("#6", width=200)

        self.initialize_date_entry()

        self.load_events()

    def initialize_date_entry(self):
        """Stelt het zoekveld in met de geselecteerde datum in het gewenste formaat."""
        self.cal.set_date(self.selected_date.strftime("%d-%m-%Y"))

    def update_date(self, event):
        """Wordt aangeroepen wanneer de datum wordt gewijzigd."""
        self.selected_date = self.cal.get_date()
        self.load_events()

    def load_events(self):
        try:
            ics_url = "https-link-to-ICS-gereator"
            with urlopen(ics_url) as response:
                ics_data = response.read().decode('utf-8')

            # Opgeslagen gegevens worden hier overschreven
            with open('ics_data.txt', 'w') as f:
                f.write(ics_data)

        except Exception as e:
            print(f"Fout bij het laden van de ics-data: {e}")
            # Als er een fout optreedt bij het laden van de URL, laad dan de opgeslagen gegevens
            self.load_events_from_file()

    def load_events_from_file(self):
        try:
            with open('ics_data.txt', 'r') as f:
                ics_data = f.read()

            calendar = ICalendar(ics_data)
            events = [event for event in calendar.events if hasattr(event, 'begin') and event.begin.date() >= self.selected_date]
            events = sorted(events, key=lambda x: x.begin)

            self.display_events(events)

        except Exception as e:
            print(f"Onverwachte fout bij het verwerken van evenementen: {e}")

    def display_events(self, events):
        self.tree.delete(*self.tree.get_children())

        previous_end_time = None
        previous_date = None

        for event in events[:15]:  # Alleen de eerste 15 evenementen
            start_time = event.begin.strftime("%H:%M")
            formatted_date = event.begin.strftime("%d-%m-%Y")
            end_time = event.end.strftime("%H:%M") if hasattr(event, 'end') and event.end else ""
            event_summary = getattr(event, 'summary', '') or getattr(event, 'name', '')
            location = getattr(event, 'location', '')  # Locatiegegevens ophalen
            attendees = getattr(event, 'attendees', set())  # Attendees ophalen

            is_all_day_event = (event.begin.hour == 8 and event.begin.minute == 30 and event.end.hour == 17 and event.end.minute == 30)
            if is_all_day_event:
                self.tree.insert("", "end", values=("", "", "", "", "", ""))
                self.tree.insert("", "end", values=(formatted_date, start_time, end_time, event_summary, location, self.convert_attendees_to_str(attendees)))
            elif previous_date is not None and event.begin.date() != previous_date:
                self.tree.insert("", "end", values=("", "", "", "", "", ""))
            elif not is_all_day_event and previous_end_time is not None and event.begin > previous_end_time:
                self.tree.insert("", "end", values=("", "", "-" * 8, "pauze", "-" * 8, "-" * 8))

            # Controleer of locatiegegevens aanwezig zijn en formatteer deze
            if location:
                location_parts = location.split(',')
                lms_location = next((part.strip() for part in location_parts if part.strip().startswith("LMS") and len(part.strip()) == 7), None)
                if lms_location:
                    location = lms_location
            self.tree.insert("", "end", values=(formatted_date, start_time, end_time, event_summary, location, self.convert_attendees_to_str(attendees)))

            previous_end_time = event.end
            previous_date = event.begin.date()

    def convert_attendees_to_str(self, attendees):
        attendee_names = self.extract_attendee_names(attendees)
        if len(attendee_names) > 3:
            return ", ".join(attendee_names[:3]) + " (en meer)"
        else:
            return ", ".join(attendee_names)

    def extract_attendee_names(self, attendees):
        if isinstance(attendees, set):
            attendee_names = []
            for attendee in attendees:
                match = re.search(r'CN=([^:]+)', str(attendee))
                if match:
                    name = match.group(1)
                    if name.upper() != "BUFFE":  # Voeg deze controle toe
                        attendee_names.append(name)
            return attendee_names
        else:
            return []

if __name__ == "__main__":
    root = tk.Tk()
    app = CalendarApp(root)
    root.mainloop()

I tried to read the documentation of auto-py-to-exe and pyinstaller, but do not really understand what tot do. In auto-py-to-exe i made a reference for "binaries" to the folder my DLL's are in. I made references to single DLL's in auto-py-to-exe.

0

There are 0 best solutions below