Python Programm zu Exe Konvertiert doch es funktioniert nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
AhhPaule
User
Beiträge: 1
Registriert: Montag 22. Juli 2019, 12:44

Hallo alle miteinander, ich habe dieses Programm hier programmiert. Es soll eine Art Wecker sein. Ich weiß das man es warscheinlich besser programmieren hätte können aber das hier ist halt meine Lösung. Das Programm funktioniert auch einwandfrei. Jedoch wenn ich es zu einer Exe konvertieren will und des dann öffnen will öffnet sich nur ganz kurz das cmd und schließt sich dann direkt wieder. Und nichts öffnet sich.
Hat jemand eine Idee ?

Code: Alles auswählen

from tkinter import *

def Wecken():
    import time
    import webbrowser
    #Methoden
    def run(zeit):
        u = int(zeit)
        time.sleep(u*60)
        webbrowser.open("Lieder\Wecklied.mp3")
    def click():
        eingabe=Eingabefeld.get()
        run(eingabe)
    def close():
        fenster.destroy()

    fenster = Tk()
    fenster.title("Zentrale für Aufstehen")
    fenster.configure(background="black")

    Label (fenster, text="In wie viel Minuten soll geweckt werden ? 0 eingeben für direkt", bg="black", fg="yellow", font="none 12 bold") .grid(row=1, column=0, sticky=W)

    Eingabefeld = Entry(fenster, width=30, bg="yellow")
    Eingabefeld.grid(row=2, column=0, sticky=W)

    Button(fenster, text="Schließen", width=10, command=close) .grid(row=3,column=3, sticky=W)
    Button(fenster, text="Abbruch", width=10, ) .grid(row=3,column=2, sticky=W)
    Button(fenster, text="Bestätigen", width=10, command=click) .grid(row=3, column=1, sticky=W)

    fenster.mainloop()

def Essen():
    import time
    import webbrowser
    #Methoden
    def run(zeit):
        u = int(zeit)
        time.sleep(u*60)
        webbrowser.open("Lieder\Essenslied.mp3")
    def click():
        eingabe=Eingabefeld.get()
        run(eingabe)
    def close():
        fenster.destroy()

    fenster = Tk()
    fenster.title("Zentrale für Essen")
    fenster.configure(background="black")

    Label (fenster, text="In wie viel Minuten soll zum Essen gerufen werden ? 0 eingeben für direkt", bg="black", fg="yellow", font="none 12 bold") .grid(row=1, column=0, sticky=W)

    Eingabefeld = Entry(fenster, width=30, bg="yellow")
    Eingabefeld.grid(row=2, column=0, sticky=W)

    Button(fenster, text="Schließen", width=10, command=close) .grid(row=3,column=3, sticky=W)
    Button(fenster, text="Abbruch", width=10, ) .grid(row=3,column=2, sticky=W)
    Button(fenster, text="Bestätigen", width=10, command=click) .grid(row=3, column=1, sticky=W)

    fenster.mainloop()

def Treffen():
    import time
    import webbrowser
    #Methoden
    def run(zeit):
        u = int(zeit)
        time.sleep(u*60)
        webbrowser.open("Lieder\Trefflied.mp3")
    def click():
        eingabe=Eingabefeld.get()
        run(eingabe)
    def close():
        fenster.destroy()

    fenster = Tk()
    fenster.title("Zentrale für Essen")
    fenster.configure(background="black")

    Label (fenster, text="In wie viel Minuten soll zum Treffen gerufen werden ? 0 eingeben für direkt", bg="black", fg="yellow", font="none 12 bold") .grid(row=1, column=0, sticky=W)

    Eingabefeld = Entry(fenster, width=30, bg="yellow")
    Eingabefeld.grid(row=2, column=0, sticky=W)

    Button(fenster, text="Schließen", width=10, command=close) .grid(row=3,column=3, sticky=W)
    Button(fenster, text="Abbruch", width=10, ) .grid(row=3,column=2, sticky=W)
    Button(fenster, text="Bestätigen", width=10, command=click) .grid(row=3, column=1, sticky=W)

    fenster.mainloop()
    
def close():
        fenster.destroy()
        exit()
        
fenster = Tk()
fenster.title("Zentrale")
fenster.configure(background="black")
Label (fenster, text="Hauptmenü", bg="black", fg="yellow", font="none 12 bold") .grid(row=1, column=0, sticky=W)
Button(fenster, text="Wecken", width=10, command=Wecken) .grid(row=2,column=0, sticky=W)
Button(fenster, text="Essen", width=10, command=Essen ) .grid(row=3,column=0, sticky=W)
Button(fenster, text="Treffen", width=10, command=Treffen) .grid(row=4, column=0, sticky=W)
Button(fenster, text="Schließen", width=10, command=close) .grid(row=5, column=0, sticky=W)


Ich hab das so wie hier in diesem Video gemacht.
https://www.youtube.com/watch?v=lOIJIk_maO4&t=56s
Also:
1. Bei Der Umgebungsvariabeln Path, die Python Scripts hinzufügen
2. pyinstaller hatte ich davor schon installiert
3. pyinstaller "mein Dateiname.py"

Dann passiert bei mir aber nichts.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@AhhPaule: *-Importe vermeiden, weil Du nicht kontrollieren kannst, was da alles an Namen in Deinen Namensraum geschaufelt werden. Alle Importe gehören auch an den Anfang der Datei und nicht in irgendwelchen Funktionen versteckt.

In einem Tk-Inter-Programm darf es im gesamten Ablauf nur ein Tk-Exemplar geben. Will man mehrere Fenster haben, benutzt man TopLevel.
Relative Pfade sind schwierig, vor allem wenn man das Programm in exe-Dateien verwandeln und über Klicks starten will.
`Wecken`, `Essen` und `Treffen` sind quasi identische Funktionen bis auf zwei Parameter. Fasse das zu einer Funktion zusammen, dann hast Du auch nicht das Problem, dass Du alle Änderungen, die dringend nötig sind, an drei Stellen machen mußt.

time.sleep darf in einem GUI-Programm nicht vorkommen. Benutze after.

Und letztendlich fehlt `mainloop` weshalb wahrscheinlich das Fenster sofort wieder zugeht.
Antworten