Tkinter per Crontab starten

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich möchte testweise ein einfaches Tkinter-Programm automatisch beim Hochfahren des Raspberrys starten lassen. Das sehr simple Skript:

    Python
    from tkinter import *
    window = Tk()
    window.title("Testfenster")
    window.mainloop()

    Per F5 in der Python IDLE oder auch im Terminal per "python3 /home/pi/Python/tkintertest.py" lässt es sich problemlos starten.

    Dann habe ich einen neuen Cronjob mittels "crontab -e" erstellt: "@reboot python3 /home/pi/Python/tkintertest.py"

    Doch beim Hochfahren des Raspberrys erscheint kein Fenster :(

    Kann es daran liegen, weil ich auf den Raspberry über VNC zugreife und somit kein Bildschirm angeschlossen ist?

    Ich habe schon das Internet durchforstet und bin zu keiner zufriedenstellenden Antwort gekommen.

    Ich hoffe, ihr könnt mir helfen :)

    Grüße

    Michael

  • Hallo,

    bitteschön  :thumbup:

    Grüße

    Dennis

    Edit: Bitte verwende keine *-Importe. Dadurch holst du dir alle Namen des Moduls in deinen Namensraum. Das kann zu Namenskollisionen und Fehler in deinem Programm führen. Wenn es dir zu viel Schreibarbeit ist, kannst du 'tkinter' umbenennen. Üblicherweise in 'tk'.

    Code
    import tkinter as tk
    window = tk.Tk()
    window.title("Testfenster")
    window.mainloop()

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Wirklich vielen Dank euch beiden ^^

    Es funktioniert!

    Eine Frage noch zu *.desktop-Dateien:

    Man kann damit doch auch "normale" Python-Programme starten lassen, oder? Inwiefern unterscheidet sich das dann zum Cronjob – gibt es Vorteile oder Nachteile?

    • Offizieller Beitrag

    Man kann damit doch auch "normale" Python-Programme starten lassen, oder?

    Könnte man, aber das ist nur sinnvoll, wenn man ein Teminalfenster haben will, in dem das Skript laufen soll. *.desktop-Dateien sind also nur für Software mit GUI gedacht. Ohne GUI empfiehlt sich eine Systemd Service Unit oder ggf. ein Cronjob.

    Inwiefern unterscheidet sich das dann zum Cronjob – gibt es Vorteile oder Nachteile?

    *.desktop-Dateien werden erst geladen, wenn der Desktop "oben" ist. Ausserdem wird die Software nur für den User geladen, in dessen autostart-Verzeichnis die *.desktop-Datei liegt. Mit einem Cronjob lässt sich zwar auch ein Program mit GUI starten, aber dann nur "unkontrolliert", was Zeitpunkt und User angeht.

  • Ok, danke.

    Ich steuere nämlich den Lüfter des Raspberrys über Python, sodass der Lüfter um 22 Uhr ausgeschaltet wird. Mithilfe einer Tkinter-GUI will ich einen Button erstellen, mit dem man den Lüfter temporär ausschalten kann. Dementsprechend wird der Tkinter-Teil in der "normalen" Python-Datei sein, die den Lüfter steuert, weshalb eben auch der Lüfter-Code über die *.desktop-Datei gestartet werden muss....

    Deshalb die Frage vorher ;)

    Warum funktionierte die GUI mit einem Cronjob eigentlich nicht?

    • Offizieller Beitrag

    Das funktioniert schon wenn man dem Job sagt, auf welcher Anzeige die Software gestartet werden soll. Bei Dir z.B. wenn Du zwischen @reboot und python3 das DISPLAY=:0 einfügst,

    aber ohne einem sleep kommst Du da nicht aus, weil zu diesem Zeitpunkt der Desktop ja noch nicht steht. Wie bereits geschrieben ist es so unkontrolliertes starten des Skripts.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!