GUI und TKinter

  • Hallo Pi-Gemeinde,:helpnew::helpnew::helpnew:

    ich bin leider noch neu in Sachen Pythonprogrammierung.
    ich möchte eine GUI auf dem Pi laufen lassen. Diese habe ich auf dem Laptop mit Python3.4 programmiert. Die GUI (nur ein Button mit GPIO Ausgang - bisher) läuft aber auf dem Pi nicht.

    Vorgehensweise:
    -Programm mit Filezilla aufs Pi kopiert
    -suod apt-get install python - tk laufen lassen
    --- Rückmeldung: 0 aktualisiert, 0 neu, 0 zu entfernen und 19 nicht aktualisiert
    python-tk ist schon die neueste Version.

    Rufe das Programm über das Terminal folgendermaßen auf
    cd Desktop
    sudo pyhton Test1.py

    Rückmeldung: ----File "Test1.py", line 2, in <module> from tkinter import*
    ImportError: No mudule named tkinter

    Was könnte das noch sein??
    Hier mein Skript vom Laptop (mit Python3.4 erstellt)

    from tkinter import *
    #import RPi.GPIO as GPIO

    #GPIO.setmode (GPIO.BOARD)
    #GPIO.setup(17, GPIO.OUT)
    fenster = Tk ()
    fenster.title ("Co")
    fenster.geometry("800x400")
    photo = PhotoImage(file="Co5.gif")
    label = Label (image=photo)
    label.image = photo
    label.pack()

    def To():
    GPIO.output (17, GPIO.HIGH)

    B1 = Button (fenster, bg="white", text = "To", command = To)
    B1.place (x=450, y=150)

    mainloop()


    Vielen Dank für Eure Unterstützung:danke_ATDE::danke_ATDE::danke_ATDE::danke_ATDE:

    Einmal editiert, zuletzt von ElektroFlo (21. Januar 2015 um 23:31)

    • Offizieller Beitrag

    Wenn es ein python3 programm ist dann musst du auch

    Code
    python3-tk

    installieren und dein script mit

    Code
    sudo python3 Test1.py

    . Nichst destor trotz sollte es auch in python 2 laufen.

    ABER hat der computer recht ;), denn das Modul heisst

    Code
    Tkinter (mit grossem T)
  • Mit Python2 heißt das Module mit großem T: Tkinter
    Aber mit Python3 wird das Module vollständig klein geschrieben: tkinter

    Wenn man die Datei nicht ausführbar gemacht und keinen Shebang gesetzt hat, also nicht eindeutig ist ob mans manuell mit python3 oder python ausführt, dann helfen folgende Zeilen:
    [code=php]
    try:
    #python3
    import tkinter
    except ImportError:
    #python2
    import Tkinter as tkinter
    [/php]

    Du hast aber generell noch ein paar mehr Fehler in deinem Code...

    Bedeutet für deinen Fall:
    [code=php]
    #!/usr/bin/python3
    try:
    #python3
    import tkinter
    except ImportError:
    #python2
    import Tkinter as tkinter
    import RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(17, GPIO.OUT)

    fenster = tkinter.Tk()
    fenster.title ("Co")
    fenster.geometry("800x400")
    photo = tkinter.PhotoImage(file="Co5.gif")
    label = tkinter.Label(master=fenster, image=photo)
    label.image = photo
    label.pack()

    def To():
    GPIO.output(17, GPIO.HIGH)

    B1 = tkinter.Button(fenster, bg="white", text="To", command=To)
    B1.place (x=450, y=150)

    try:
    fenster.mainloop()
    except (KeyboardInterrupt, SystemExit):
    print("Schliesse Programm..")
    [/php]


    Und das nächste mal bitte Scripts / Ausgaben in CODE posten (oder wie ich in PHP), und dir auch ein bisschen mehr Mühe mit deinen Beiträgen machen

  • dbv

    Tkinter ist auch in Python3's Standardbibliothek bereits vorhanden.

    Also entweden die Shebang

    Python
    #!/usr/bin/python3

    in die erste Zeile einfügen, oder so wie du es sagtest, mit ``python3`` starten.

    Edit:
    irgendwie will das mit dem Shebang auf dem RPi nicht. Dann bleibt wirklich nur:

    Code
    python3 Test1.py

    Edit II:

    meigrafd
    Wie funktioniert das mit dem "Shebang" in Debian? Standardmäßig ist Python2 in Debian und so auch an (in Windows würde man Umgebungsvariable sagen) ``python`` gebunden.

    Edit III:
    Ich hab's selber gerafft ausgehend von:

    Python
    #!/usr/bin/python3
    import sys
    
    
    print(sys.version)

    Mit python test.py --> wird der Python2 Interpreter gestartet
    Mit python3 test.py --> wird der Python3 Interpreter gestartet
    unabhängig was als Shebang angegeben wurde.

    Wenn ich die Datei ausführbar mache mit chmod +x test.py und das Programm dann ohne Angabe vom Interpreter starte mit ./test.py, dann wird das Programm mit dem Interpreter, welcher im Shebang steht, gestartet.

    Da ich aber Windows nutze wie ElektroFlo wahrscheinlich auch, gibt es noch weitere Probleme mit dem Editor. Zwar erstellte ich mit Notepad++ auch utf-8 kodierte Dateien, aber wenn ich diese auf den RPi kopiere und mit ./test.py starte, kommen Fehler. Also zur Sicherheit noch

    Code
    apt-get install dos2unix

    installieren und die unsichtbaren Zeichen wie ``\r\n`` entfernen mit

    Code
    dos2unix test.py

    und dann sollte es gehen für Windows Benutzer wie mich ;)

  • oh man bootsmann... langsam müsste dir das aber doch peinlich sein oder nich :-/

    Erst schreibst du irgendwas von wegen TKinter wäre mit python3 Standardmäßig installiert (stimmt nicht) und kurz danach fragst du wie das mit dem Shebang in Debian funktioniert?


    Ließ dir doch einfach mal aufmerksamer (ich weiß, tust du nicht wirklich gerne) den Beitrag#1 durch.

    Geht man den Text von oben nach unten durch, ist die erste Zeile die auffällt: -suod apt-get install python - tk laufen lassen
    Gleich darauf folgt die nächste Zeile die auffällt: python-tk ist schon die neueste Version.
    Dann auch gleich der nächste Hingucker: sudo pyhton Test1.py
    Und auch die Fehlermeldung: File "Test1.py", line 2, in <module> from tkinter import*


    Er hat also offensichtlich die Datei direkt an den Interpreter übergeben (ohne ein Shebang beachtet wird). Die erste Zeile des Scripts hat er zudem auch nicht mit gepostet (ob dort der richtige Shebang steht wissen wir nicht).
    Der von ihm verwendete Interpreter ist aber der falsche - bzw ist der Name des Modules mit python(2) ein anderer als mit python3, nämlich eine andere GROSS-/Kleinschreibung, die aber bekanntlich bei Linux sehr wichtig ist.

    Wenn Sein Problem mit einem falschen Zeilenumbruchszeichen zu tun hätte, sähe die Fehlermeldung anders aus - dein letzter Kommentar bezüglich dos2unix ist also auch deplatziert.

    Die Lösung wurde schon gepostet, also hättest du dir deine peinliche Aktion hier eigentlich auch sparen können - das schießt den Vogel nun echt ab - sprichwörtlich. :no_sad:

  • Code
    Erst schreibst du irgendwas von wegen TKinter wäre mit python3 Standardmäßig installiert (stimmt nicht) und kurz danach fragst du wie das mit dem Shebang in Debian funktioniert?

    1. Tkinter ist in der Standardbibliothek dabei, bei Python2.x und auch bei Python3.x

    2. Dein Absatz mit try - except ist auch bullshit, denn dies wird nur gemacht, wenn ein Programm auf oder abwärts kompatibel sein soll. Ihm geht es aber um Python3.4. Also ist der Aufruf wie es dbv schrieb korrekt. Du hingegen verlierst darüber kein Wort.

    3. Wenn der das Programm ohne Angabe vom Interpreter ausführt (./Test.py) und er ein Windows-Laptop nutzt, wird dieses Problem sehr wahrscheinlich auftreten. Aber ja, dass wissen wir jetzt noch nicht

    Edit:
    PS: deine Falschinformationen widern mich langsam wirklich an...

  • Zu 1.: Nein ist es nicht!! Unter Raspbian ist zwar python3 installiert aber KEIN tkinter, das muss man erst nach installieren.

    Spoiler anzeigen

    obiges Script aus Beitrag#3:

    Selbst für python2 muss man erst Tkinter installieren!!

    Zu 2.: Ob er abwärtskompatibel sein will oder nicht, spielt nur eine untergeordnete Rolle. Es zeigt aber wie ich finde sehr gut wo der Unterschied besteht und hilft wenn man Seinen Code mit sowohl als auch python2 oder python3 ausführen will (bei seinem aktuellen Stand spielt das kaum eine Rolle ob python2 oder python3 genutzt wird).
    dbv sein Aufruf war leider auch falsch da das Module für python3 vollständig klein geschrieben wird, nicht mit großem T


    Dein "ich weiß alles, aber irgendwie doch nicht" widert mich ebenfalls langsam an.

  • Ich hab ein jungfräuliches Image auf meiner Karte von gestern:

    Code
    Linux raspberrypi 3.18.3+ #739 PREEMPT Tue Jan 20 17:45:32 GMT 2015 armv6l GNU/Linux
    root@raspberrypi:/# python3
    Python 3.2.3 (default, Mar  1 2013, 11:53:50)
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import tkinter
    >>> help(tkinter)
    Help on package tkinter:
    • Offizieller Beitrag

    Grad selbst probiert, inkl installation von python3

    meigrafd
    Ich habs oben falsch stehen lassen, weil sonst die weitere Diskussion irgendwe nicht nachvollziehbar wäre. Aber du hast recht, in p3 wird tkinter komplett kleingeschrieben.

  • Ich schreib das Image nochmals auf die Karte und mach alsdann keine Updates. Ich könnte schwören, dass ich ''tkinter" nicht nachinstalliert habe, denn dies habe ich nie gebraucht. ggf. muss ich mein Gesagtes widerrufen und mich entschuldigen. ;)

    In 1h sag ich dann bescheid (ich editiere diesen Post)

    Neu geflasht (2014-12-24-wheezy-raspbian.img)

  • Hallo zusammen....

    Sorry wenn ich hier was losgetreten habe - dachte nicht das es so ausartet und Ihr Euch gegenseitig "auffresst" :angel: :angel: :angel:

    Dann zum zweiten :danke_ATDE: :danke_ATDE: :danke_ATDE: :danke_ATDE: :danke_ATDE: :danke_ATDE: an alle die sich hier mit einer Antwort beteiligt haben.. das Programm bzw. die GUI läuft nun

    [b]ABER[b]

    bekkome nun folgende Meldung im Terminal angezeigt

    -tkinter.TC1Error: no display name and no $Display enviroment variable

    ich bin bereits auf der Suche nach einer Lösung - aber wenn ihr Vorschläge habt könnt ihr sie gerne hier loswerden :thumbs1::thumbs1::thumbs1:

    achja... nun weis ich auch wie man einen PHP-Code einfügt - ich bitte hiermit um Entschuldigung für den vorangegangenen Post.


    Gruß
    Flo

  • Dann hast du vermutlich kein Monitor an den PI angeschlossen. Lies dazu mal das: Grafische Umgebung über Netzwerk mit X11-Forwarding


    (und bitte etwas weniger Smilies)

Jetzt mitmachen!

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