• Erste Schritte
  • Hardware & GPIO
  • Projekte
  • Software
    • Webserver
  • Arduino & ESP8266
  • Hausautomatisierung
  • Sonstiges
    • News
Facebook Twitter YouTube
Tutorials for Raspberry Pi Tutorials for Raspberry Pi
  • Einstieg
    • Erste Schritte
      • Raspberry Pi 3 Einstieg - Starter KitWas brauche und wie starte ich? – Raspberry Pi Einstieg
    • Einrichtung
      • microsd_karte_menuRaspbian Betriebssystem auf eine SD Karte flashen – Einfach & Schnell
      • wlanbluetooth_menuWLAN und Bluetooth einrichten – Raspberry Pi 4
      • wifi_menuWLAN Stick installieren und einrichten – Alternative
      • bash_menuSSH Zugriff einrichten via Putty – Kommandozeilen Zugriff
      • rdp_menuRemotedesktop Verbindung aufbauen – Fernsteuerung
    • Einsteiger Projekte
      • Sinnvolles Raspberry Pi Zubehör
      • 15 Raspberry Pi Projekte für Anfänger
      • Ampelschaltung mit GPIOs
      • GPIOs mit Port Expander erweitern
      • Elektronischer Würfel
      • 13 tolle Projekte für Kinder und Jugendliche
      • Roboter selber bauen
      • In Visual Studio Code mit C++ programmieren
      • Wünsch dir ein Tutorial
    • Programmieren lernen
      • Teil 1: Einführung
      • Teil 2: GPIOs steuern
      • Teil 3: GUI erstellen
      • Teil 4: PWM
      • C# GUI Apps entwickeln
  • Hardware & GPIO
    • 50 der wichtigsten Raspberry Pi Sensoren und Module – Aufgelistet mit Links zu den TutorialsRaspberry Pi Sensoren
    • Beliebte Tutorials
      • Raspberry Pi Luftfeuchtigkeit/Temperatur SensorLuftfeuchtigkeit und Temperatur messen
      • Raspberry Pi WS2801B RGB LED Streifen anschließen und steuernWS2801 RGB LED Streifen anschließen und steuern
      • Raspberry Pi Funksteckdosen (433Mhz)Raspberry Pi Funksteckdosen (433Mhz)Funksteckdosen (433MHz) steuern
      • Raspberry Pi Relais ModulRaspberry Pi: Relais-Schalter per GPIO steuern
      • Raspberry Pi Servo MotorRaspberry Pi Servo Motor Steuerung
      • Amazon-Alexa-deutsch-auf-dem-Raspberry-Pi-installierenAmazon Alexa (Deutsch) auf dem installieren
      • Entfernung messen mit Ultraschallsensor HC-SR04 – Raspberry PiEntfernung messen mit Ultraschallsensor HC-SR04
      • 71-M-PU7vML.-S3L1500-Raspberry Pi’s über 433 MHz Funk kommunizieren
      • Raspberry Pi PIR Motion SensorBewegungsmelder PIR anschließen und steuern
      • Raspberry Pi USB Boot per Stick oder SSD Festplatte einrichtenUSB Boot per Stick oder SSD Festplatte
      • Analog
        • Raspberry Pi MCP3008 ADCMCP3008: Am Raspberry Pi analoge Signale auslesen
        • Raspberry Pi Gas Sensor MQ-2Raspberry Pi Gas Sensor (MQ-X) konfigurieren und auslesen
        • Raspberry Pi PulsmesserRaspberry Pi Pulsmesser: Herzfrequenz messen
        • Joystick am Raspberry Pi benutzen (mit MCP3008)Joystick am Raspberry Pi benutzen (mit MCP3008)
        • infrarot sharp distance senserInfrarot Abstandsmessung mit dem Raspberry Pi
        • Raspberry Pi Drehregler - Rotary EncoderKY040 Drehregler als Lautstärkeregler für den Raspberry Pi
        • Easpberry Pi Soil SensorBodenfeuchtigkeit mit dem Raspberry Pi messen
        • Raspberry Pi KeypadRaspberry Pi Keypad anschließen – Codeschloss
        • Raspberry Pi door sensorÜberwachung von Fenstern und Türen mit dem Raspberry Pi und Reed-Relais
        • Raspberry Pi Fotowiderstand HelligkeitssensorFotowiderstand (Helligkeitssensor) am Raspberry Pi
        • Raspberry Pi Waage selber bauen (mit Gewichtssensor HX711)Raspberry Pi Waage selber bauen (mit Gewichtssensor HX711)
      • Funk
        • 71-M-PU7vML.-S3L1500-Raspberry Pi’s über 433 MHz Funk kommunizieren lassen
        • Remote Control Raspberry Pi 433Mhz Radio TransmitterRaspberry Pi mit 433Mhz Funksender fernsteuern
        • Raspberry Pi Funksteckdosen (433Mhz)Raspberry Pi Funksteckdosen (433Mhz)Raspberry Pi Funksteckdosen (433MHz) steuern
        • Raspberry Pi MiFlora - Xiaomi Pflanzensensor in OpenHAB einbindenMiFlora – Xiaomi Pflanzensensor ins Smart Home einbinden
        • Raspberry Pi RFID RC522 TüröffnerRaspberry Pi RFID RC522 Tags auslesen (NFC)
        • Funkkommunikation zwischen Raspberry Pi's und Arduinos (2.4 GHz)Funkkommunikation (2.4 GHz): Arduino & Raspberry Pi
        • Raspberry Pi Radio ReceiverRaspberry Pi als Radioempfänger benutzen
        • Raspberry Pi Xbox 360 Wireless ControllerRaspberry Pi mittels Xbox 360 Controller steuern
        • Raspberry Pi GSM Modul - Huawei Internet SticksRaspberry Pi GSM Modul – Mobiles Internet
        • Raspberry Pi Bluetooth DatentransferRaspberry Pi Bluetooth Datentransfer zum Smartphone
      • Infrarot & Laser
        • Raspberry Pi Infrarot FernbedienungRaspberry Pi: Per IR Remote Befehle ausführen
        • infrarot sharp distance senserInfrarot Abstandsmessung mit dem Raspberry Pi
        • Raspberry Pi Laser Lichtschranke für weite DistanzenRaspberry Pi Laser Lichtschranke für weite Distanzen
        • Infrarot Raspberry Pi FernbedienungInfrarot Steuerung einrichten
        • Raspberry Pi Infrarot Lichtschranke bauen und Geschwindigkeit messenRaspberry Pi Infrarot Lichtschranke bauen
        • Raspberry Pi Fotowiderstand HelligkeitssensorFotowiderstand (Helligkeitssensor) am Raspberry Pi
      • Temperatur & Navigation
        • Raspberry Pi Luftfeuchtigkeit/Temperatur SensorRaspberry Pi: Luftfeuchtigkeit und Temperatur messen
        • Measuring Temperature with a Raspberry Pi Temperature Sensor (1-Wire)Raspberry Pi Temperatursensor (1-Wire): Temperatur messen
        • Raspberry Pi BMP180 SensorRaspberry Pi und I2C Luftdrucksensor BMP180
        • Raspberry Pi RTC Real Time ClockReal Time Clock Modul steuern
        • Rotation und Beschleunigung mit dem Raspberry Pi messenRotation und Beschleunigung mit dem Raspberry Pi messen
        • Raspberry Pi GPS ModulRaspberry Pi GPS Ortungs- / Navigationsgerät bauen
        • Raspberry Pi Kompass selber bauenRaspberry Pi Kompass selber bauen (HMC5883L)
        • Kontaktlosen Infrarot-Temperatursensor MLX90614 am Raspberry Pi auslesenMLX90614 – Kontaktlos Temperaturen messen
      • Displays
        • Raspberrry Pi HD44780 I2CHD44780 LCD Display per I2C ansteuern
        • Raspbery Pi LCD DisplayRaspberry Pi LCD Display: 16×2 Zeichen anzeigen
        • DisplayTipps & Tricks zum offiziellen 7″ Raspberry Pi Touchscreen
        • Raspberry Pi TouchscreenTestbericht zum 7″ Raspberry Pi Touchscreen Display
        • LCD Touch Display (3.2″) am Raspberry PiLCD Touch Display (3.2″) am Raspberry Pi
        • tft lcd touch displayRaspberry Pi LCD Touch Display Teil 2 – Anpassungen
        • Raspberry Pi LED MAX7219 Dot Matrix – ProjektübersichtRaspberry Pi LED Matrix – Projektübersicht
        • Raspberry Pi 7 Segment Anzeige Kathode mit MAX7219Raspberry Pi: 7 Segment Anzeigen mit MAX7219 steuern (Kathode)
        • 7 Segment Anzeige (Anode) mit MAX7219 MAX7221 und Raspberry Pi7 Segment Anzeige mit MAX7219 am Raspberry Pi (Anode)
        • Raspberry Pi Tablet Raspad TestberichtRaspberry Pi Tablet „Sunfounder RasPad“ Testbericht
      • Motoren & Sonstige
        • Raspberry Pi Stepper Motor Control with L293D / ULN2003ARaspberry Pi Schrittmotor ansteuern
        • Raspberry Pi Servo MotorRaspberry Pi Servo Motor Steuerung
        • Raspberry Pi PCA9685 mehrere Servos gleichzeitig steuernMehrere Servo Motoren per Raspberry Pi steuern
        • Raspberry Pi PIR Motion SensorBewegungsmelder PIR anschließen und steuern
        • How to use a Raspberry Pi Fingerprint Sensor for AuthenticationRaspberry Pi Fingerprint Sensor zur Authentifizierung nutzen
        • Raspberry Pi Akku AdapterRaspberry Pi mit Akkus/Batterien betreiben
        • Entfernung messen mit Ultraschallsensor HC-SR04 – Raspberry PiEntfernung messen mit Ultraschallsensor HC-SR04
        • Raspberry Pi WS2801B RGB LED Streifen anschließen und steuernWS2801 RGB LED Streifen anschließen und steuern
        • Raspberry Pi WS2812 RGB LED StripWS2812 RGB LED Streifen per Raspberry Pi steuern
        • Raspberry Pi Überwachungskamera LivestreamÜberwachungskamera Livestream einrichten
        • NoIRAufnahmen mit dem offiziellen Kamera Modul
        • Raspberry Pi Zero - establishing an Ethernet connection (ENC28J60)Raspberry Pi Zero – Ethernet Verbindung
  • Software
    • Webserver Installation
      • apache2_menu25Teil 1 – Apache2
      • php_menu25Teil 2 – PHP 5
      • mysql_menu25Teil 3 – MySQL
      • phpmyadmin_menu25Teil 4 – phpMyAdmin
      • ftp_menu25Teil 5 – FTP Server
      • dns_menu25Teil 6 – DNS Server via No-IP
      • home_menu25Homeverzeichnis ändern
      • share_25Samba Server: Dateien im Netzwerk teilen
      • nodejs_menu25Node.js Webserver installieren und GPIOs schalten
      • ssl_menu25SSL Zertifikat kostenlos mit Let’s Encrypt
      • wordpress_25Eigenen WordPress-Server einrichten
      • cloud-25Nextcloud auf dem Raspberry Pi installieren
    • Entertainment
      • led_menu25Raspberry Pi Ambilight für alle Geräte mit OSMC selber bauen
      • amazon_menu25Amazon Alexa (Deutsch) auf dem Raspberry Pi installieren
      • controller_25Raspberry Pi RetroPie – Spielekonsole selber bauen
      • kodi_menu25Mediencenter Raspbmc als SmartTV mit dem Raspberry Pi
      • android_25Android TV Box zum selber bauen
      • apple-2316234_640Raspberry Pi als AirPlay-Empfänger
      • jukebox_menu25Raspberry Pi als Jukebox (Spotify, Soundcloud, TuneIn, uvm.)
      • steam_25Steam Spiele streamen
      • minecraft_menu25Raspberry Pi Minecraft Server
      • youtube_25YouTube Live Streaming einrichten
      • qr-code-tutorials-raspberrypi.de_25Raspberry Pi QR / Barcode Scanner
    • Fernsteuerung
      • rdp_menuRaspberry Pi Remotedesktop Verbindung
      • ssh_menu25SSH Zugriff einrichten via Putty (Windows)
      • vnc_menu25Raspberry Pi mittels VNC fernsteuern
      • welcome_menu25SSH Terminal Begrüßung ändern
      • telegram1_menu25Telegram Messenger auf dem RaspberryPi
      • telegram2_menu25Mit Telegram Messenger Raspberry Pi steuern
      • bluet_menu25Raspberry Pi Bluetooth Datentransfer zum Smartphone
      • alexa_voice_25Eigenen Raspberry Pi Alexa Skill bauen
      • microphone_25Sprachsteuerung selber bauen
      • mqtt_25MQTT Broker/Client Funkkommunikation
      • mail_25Vom Raspberry Pi Emails senden
      • twitter_25Per Twitter Bot Nachrichten posten
    • Weitere
      • loggen_menu25Sensordaten mit ThingSpeak loggen und auswerten
      • mysql_datalogger25Per lokaler MySQL Datenbank zum Raspberry Pi Datenlogger
      • opencv_menu25OpenCV auf dem Raspberry Pi installieren
      • arduino_menu30tWiringPi installieren & Pinbelegung (Raspberry Pi)
      • radio_menu25Raspberry Pi als Radio Sendestation
      • win10_menu25Windows 10 IoT auf dem Raspberry Pi installieren
      • printer_25Drucker einrichten und per Knopfdruck Bilder drucken
      • gsm_menu25Raspberry Pi GSM Modul – Mobiles Internet (LTE, 3G, UMTS)
      • autostart_menu25Autostart: Programm automatisch starten lassen
      • machine-learning-25Raspberry Pi Machine Learning erlernen
  • Projekte
      • roboter_menu30tRoboter
        • Raspberry Pi Roboter ProjektRaspberry Pi Roboter Projektübersicht
        • Raspberry Pi Roboter Bausatz fertigTeil 1: Zusammenbau
        • Raspberry Pi Roboter - Linien folgenTeil 2: Linien folgen lassen
        • Raspberry Pi Roboter per Infrarot Fernbedienung steuernTeil 3: Per Infrarot Fernbedienung steuern
        • Raspberry Pi Roboter: Ultraschall AutopilotTeil 4: Automatisch Hindernissen ausweichen
        • Raspberry Pi Roboter der eigenen Stimme folgen lassenTeil 5: Der eigenen Stimme folgen lassen
        • Raspberry Pi Roboter mit Xbox 360 Controller fernsteuernTeil 6: Mit Xbox 360 Controller Roboter fernsteuern
        • Raspberry Pi Robot Arm 6DOF6-Gelenkigen Roboter Arm am Raspberry Pi betreiben (6 DOF)
      • led_menu30LED Matrix
        • Raspberry Pi LED MAX7219 Dot Matrix – ProjektübersichtMAX7219 LED Matrix – Projektübersicht
        • 8×8 LED Dot Matrix Parts8×8 LED Matrix – Zusammenbau und Installation
        • Raspberry Pi Bibliothek für mehrzeilige m x n MAX7219 LED MatrizenBibliothek für mehrzeilige m x n MAX7219 LED Matrizen
        • Graphiken auf mehrzeiligen Raspberry Pi LED Matrizen zeichnenGraphiken auf mehrzeiligen Raspberry Pi LED Matrizen zeichnen
        • Pong auf MAX7219 Matrizen spielen (mit Joystick) – Raspberry PiPong auf MAX7219 Matrizen spielen (mit Joystick)
        • Snake auf Raspberry Pi MAX7219 Matrizen spielenSnake auf Raspberry Pi MAX7219 Matrizen spielen
        • 7 Segment Anzeige (Anode) mit MAX7219 MAX7221 und Raspberry Pi7 Segment Anzeige (Anode) mit MAX7219/MAX7221
        • Raspberry Pi 7 Segment Anzeige Kathode mit MAX7219Raspberry Pi: 7 Segment Anzeigen mit MAX7219 steuern (Kathode)
      • wetterstation_menu30Wetterstation
        • Raspberry Pi Wetterstation mit OpenHAB 2 bauenEigene Raspberry Pi Wetterstation mit OpenHAB 2 bauen
        • Raspberry Pi Luftfeuchtigkeit/Temperatur SensorLuftfeuchtigkeit und Temperatur messen
        • raspberry_pi_thingspeak_daten_loggenSensordaten mit ThingSpeak loggen und auswerten
        • Raspberry Pi BMP180 SensorRaspberry Pi und I2C Luftdrucksensor BMP180
        • Measuring Temperature with a Raspberry Pi Temperature Sensor (1-Wire)Raspberry Pi Temperatursensor (1-Wire): Temperatur messen
        • ESP8266 NodeMCU Außenposten-Wetterstation für den Raspberry PiESP8266 Wetterstation Außenposten für den Raspberry Pi
        • Raspberry Pi Gas Sensor MQ-2Raspberry Pi Gas Sensor (MQ-X) konfigurieren und auslesen
      • arduino_menu30tArduino & ESP8266
        • ESP8266 Microcontroller BoardEinführung & Programmierung des ESP8266 NodeMCU Boards
        • Raspberry Pi + ESP8266 NodeMCU: Per WLAN Daten sendenRaspberry Pi + ESP8266 NodeMCU: Per WLAN Daten senden
        • ESP8266 NodeMCU Außenposten-Wetterstation für den Raspberry PiESP8266 Wetterstation Außenposten für den Raspberry Pi
        • Mit dem NodeMCU ESP8266 433MHz Funksteckdosen steuernMit dem NodeMCU ESP8266 433MHz Funksteckdosen steuern
        • ESP8266 NodeMCU HD44780 LCD Display per I2C steuernNodeMCU ESP8266: HD44780 LCD Display per I2C steuern
        • ESP8266 Grafikdisplay: Am SSD1306 OLED per I2C Bilder & Text anzeigen
        • ESP8266 Google Maps API RoutenplanerESP8266 Google Maps API Routenplaner auf LCD anzeigen
        • 2000px-Arduino_Logo.svgRaspberry Pi und Arduino – Einführung
        • arduino unoArduino und Raspberry Pi miteinander kommunizieren lassen
        • Funkkommunikation zwischen Raspberry Pi's und Arduinos (2.4 GHz)Funkkommunikation zwischen Raspberry Pi’s und Arduinos (2.4 GHz)
        • NodeMCU: ESP8266 mit Solarpanel und Akku mit Strom versorgenNodeMCU: ESP8266 mit Solarzelle und Akku mit Strom versorgen
        • ESP8266 Access Point: Günstigen Wlan Repeater selber bauenESP8266 Access Point: Günstigen Wlan Repeater selber bauen
      • Mini Projekte
        • Raspberry Pi Gewächshaus automatisch selber bauenAutomatisches Raspberry Pi Gewächshaus selber bauen
        • Eigene Raspberry Pi Gartenbewässerung mit Webseite bauenEigene Gartenbewässerung mit Webseite bauen
        • Raspberry Pi Radio StationRaspberry Pi als Radio Sendestation verwenden
        • Raspberry Pi Radio ReceiverRaspberry Pi als Radioempfänger benutzen (Autoradio, Car PC)
        • spotify-logo-primary-horizontal-dark-background-rgbRaspberry Pi als Jukebox (Spotify, Soundcloud, TuneIn, uvm.) – Online Radio
        • Raspberry Pi RetroPie Guide - SNES Classic Spielekonsole selber bauenRaspberry Pi RetroPie Guide – SNES Spielekonsole bauen
        • Android + Raspberry Pi: Funksteckdosen App BedienungRaspberry Pi + Android/iOS: Funksteckdosen per App schalten
        • Indirekte Deckenbeleuchtung selber bauen mit farbigem LED LichtIndirekte Deckenbeleuchtung selber bauen mit farbigem LED Licht
  • Sonstiges
    • Wünsch dir ein Tutorial
    • News
    • Reviews
      • Pi Cap – Kapazitives Raspberry Pi Erweiterungsboard
      • Raspberry Pi Tablet „Sunfounder RasPad“ – Testbericht & Einrichtung
      • Testbericht zum 7″ Raspberry Pi Touchscreen Display
      • CrowPi 2 Testbericht: Laptop & Lern-Kit für Kinder
      • Daten auf dem Wio Terminal LCD Screen anzeigen
    • Raspberry Pi Zero
      • Offizielles 5$ Raspberry Pi Zero Modul vorgestellt
      • Raspberry Pi Zero – Ethernet Verbindung herstellen (ENC28J60)
      • Raspberry Pi: WS2801 RGB LED Streifen anschließen und steuern
  • Hausautomation
    • OpenHAB
      • steckdose_25Sonoff S20 Wifi Steckdose steuern
      • wireless_25Funksteckdosen (433 MHz) schalten
      • schalter_25Relais steuern (Rollladen, Lichter, etc.)
      • wetterstation_menu30Wetterstation mit OpenHAB 2 bauen
      • ws28_25WS28xx RGB LED Streifen steuern
      • touchscreen_25Touchscreen Panel bei Näherung aktivieren
      • mqtt_25MQTT Datenabfrage: Raspberry Pi an ESP8266
      • spotify_25Remote Spotify Player im Smart Home
      • heizung_25eQ-3 Thermostat im Smart Home
    • Einführung
      • Raspberry Pi Smart Home OpenHAB installierenOpenHAB installieren & konfigurieren
      • Home Assistant auf dem Raspberry Pi – Erste Schritte
    • ESP8266 NodeMCU
      • esp8266_25Einführung & Programmierung
      • arduino_25ESP8266: Arduino IDE installieren
      • lcd_25NodeMCU HD44780 LCD
      • battery_25Batteriebetrieb via Deep-Sleep
      • wifi_menuPer WLAN Daten senden
      • wetterstation_menu30Wetterstation Außenposten
      • maps_25Google Maps Routenplaner
      • wireless_25NodeMCU Funksteckdosen steuern
      • mail_25Vom NodeMCU Emails versenden
      • rgb_25WS2812B LEDs am Smartphone steuern
      • solar_25ESP8266 Stromversorgung mit Solarzelle
    • Überwachung
      • Aufnahmen mit dem offiziellen Kamera Modul des Raspberry Pi
      • Raspberry Pi: Überwachungskamera Livestream einrichten
      • mailbox_25Briefkasten Sensor – Email Benachrichtigung bei neuer Post
      • Raspberry Pi Überwachungskamera mit Webcam betreiben
      • Überwachung von Fenstern und Türen mit dem Raspberry Pi und Reed-Relais
      • ESP32 Cam Livestream Tutorial für Kamera Modul
    • Raspberry Pi + Android: Benachrichtigungen von Bewegungsmelder
    • Raspberry Pi + Android/iOS: Funksteckdosen per App schalten
    • Raspberry Pi + Android: Schwenkbarer Kamera-Livestream
      • Smart Home
        • Amazon Alexa (Deutsch) auf dem Raspberry Pi installieren
        • Raspberry Pi Funksteckdosen (433MHz) steuern – Tutorial
        • Raspberry Pi Sprachsteuerung selber bauen (Hausautomatisierung)
Tutorials for Raspberry Pi Tutorials for Raspberry Pi
Home»Erste Schritte»Programmieren lernen am Raspberry Pi – Teil 3: GUI erstellen

Programmieren lernen am Raspberry Pi – Teil 3: GUI erstellen

Facebook Twitter LinkedIn Tumblr Email Reddit
Raspberry Pi Programmieren lernen GUI erstellen
Teilen
Facebook Twitter LinkedIn Email Tumblr Reddit Telegram WhatsApp

In den vorherigen beiden Teilen haben wir grundlegende Funktionen und die Nutzung der programmierbaren GPIOs kennengelernt. Üblicherweise wird von den meisten Nutzern erwartet, dass ein Programm auch eine grafische Oberfläche hat, um bestimmte Funktionen zu steuern.

Darum geht es im dritten Teil: Wir erstellen mit Hilfe von der Bibliothek Tkinter eine grafische Oberfläche. Mit Hilfe dieser können u.a. auch GPIOs gesteuert werden. Schlussendlich wartet am Ende des Tutorials noch eine Aufgabe darauf gelöst zu werden.

 

Zubehör

Auch hier wieder vorweg der Hinweis, dass das Tutorial nur einen Teil des Ganzen umfasst. Gerade da die Erstellung eines User Interface eine ganz eigene Geschichte für sich ist und die von uns verwendete Bibliothek sehr viel mehr Funktionen hat, als wir in diesem Tutorial behandeln, ist der Blick in eines der Python Nachschlagewerke immer nützlich.

Da wir in diesem Teil jedoch primär keine Hardware ansprechen, ist neben dem Raspberry Pi nichts weiter nötig. Du solltest allerdings den Pi entweder per HDMI an einen Bildschirm verbunden haben, oder aber dich per Remotedesktopverbindung über deinen PC verbinden. Besonders gut lässt sich eine grafische Oberfläche auch mit z.B. dem Raspberry Pi Touchscreen verbinden.

Am Ende des Tutorials stelle ich noch eine Aufgabe, für diejenigen die das Gelernte gleich selbst umsetzen wollen (keine Sorge – die Lösung gibt es auch). Dazu ist weiterhin folgendes nötig:

  • 5V Servomotor
  • Jumper Kabel (male – female)

 

Vorbereitung

Die Bibliothek von Tkinter ist nicht immer installiert, daher ist dies der erste Schritt. Wir öffnen ein neues Terminal Fenster (geht auch per SSH) und geben folgendes ein:

sudo apt-get install python python-tk idle python-pmw python-imaging --yes

Nachdem alles durchgelaufen ist, kannst du den Dateiexplorer öffnen und im Homeverzeichnis (/home/pi) einen neuen Ordner mit dem Namen „python-GUI“ (ohne Anführungszeichen) per Rechtsklick anlegen. Öffne diesen Ordner nur erstelle per Rechtsklick -> Create New -> Empty File eine Datei mit dem Namen „gui.py“ (ohne Anführungszeichen).

Durch Rechtsklick auf diese Datei kannst du sie mit verschiedenen Editoren bearbeiten. Ein Klick auf Open öffnet sie mit dem Standardeditor, worin wir gleich unseren Code schreiben.

Du könntest die folgenden Schritte auch sequentiell wie zuvor in der Python Konsole ausführen. Dies bietet sich dann an, wenn du die Funktionalität der aufgerufenen Befehle nachvollziehen willst – ist allerdings im Produktivbetrieb nicht all zu sinnvoll.

 

In jenem Skript importieren wir als aller erstes die Bibliothek:

Python
1
from tkinter import *

Achtung: Wenn du Python 2.7 verwendest, muss Tkinter groß geschrieben, wohingegen es bei der Verwendung von Python 3 klein geschrieben wird.

 

 

GUI erstellen

Zunächst fügen wir den einfachen Aufbau ein, damit ein leeres Fenster erstellt wird. Später definieren wir die Elemente, welche angezeigt werden sollen. Zunächst aber geben wir lediglich den Titel und die Hintergrundfarbe des Fensters an. Die Farbe wird dabei durch einen RGB Hex Wert angegeben, wobei #FFFFFF für Weiß steht.

Dies ist der Code, den wir einfügen:

Python
3
4
5
6
7
8
9
root = Tk() # Fenster erstellen
root.wm_title("Raspberry Pi GUI") # Fenster Titel
root.config(background = "#FFFFFF") # Hintergrundfarbe des Fensters
 
# Hier kommen die Elemente hin
 
root.mainloop() # GUI wird upgedated. Danach keine Elemente setzen

Wir öffnen ein Terminal und wechseln in das Verzeichnis (cd ~/python-GUI). Dort starten wir das Skript:

sudo python3 gui.py

In der unteren Ecke öffnet sich nun unser definiertes Fenster:

Nun kann unser grafisches Interface noch nichts, außer sich öffnen. Daher wollen wir in den nächsten Schritten Elemente hinzufügen. Jeglicher Code kommt zwischen Zeile 8 und 10.

 

Frames

Damit unser Programm eine Struktur bekommt, müssen wir uns zunächst Gedanken zum Layout machen. Ich habe testweise folgenden Aufbau vorgesehen:

Dabei können beide Seiten über sog. Frames definiert werden. Ein Frame braucht ein übergeordnetes Element (in welchem es eingefügt wird) sowie seine Höhe und Breite.

Darüber hinaus können wir die Position des Frames in seinem übergeordnetem Element angeben. Stelle dir dabei vor, dass jedes Element eine Art Gitter hat und wir die Reihe und Spalte angeben. Da wir zwei nebeneinander platzierte Frames haben möchten, befinden diese sich in der selben Zeile, allerdings in einer anderen Spalte:

Python
8
9
10
11
12
13
14
15
# Hier kommen die Elemente hin
leftFrame = Frame(root, width=200, height = 400) # Frame initialisieren
leftFrame.grid(row=0, column=0, padx=10, pady=3) # Relative Position und Seitenabstand (padding) angeben
# Hier kommen die Elemente des linken Frames rein
 
rightFrame = Frame(root, width=400, height = 400)
rightFrame.grid(row=0, column=1, padx=10, pady=3)
# Hier kommen die Elemente des rechten Frames rein

Unser resultierendes Ergebnis sieht nun folgend aus:

Wie du siehst haben beide Frames auch einen Abstand zu den Seiten. An den horizontalen Kanten ist dieser 10 Pixel und an den vertikalen nur 3 Pixel (padx und pady). Übrigens ist es auch bei diesen Elementen möglich die Hintergrundfarbe etc. einzustellen.

Die Elemente innerhalb eines Frames werden nach der Initialisierung dieses Frames angegeben.

 

Labels (und Bilder)

Labels sind quasi Beschriftungen – also Texte, die nicht bearbeitet werde können. Diese sind z.B. für  Infoboxen oder andere Informationen zu nutzen. Im folgenden habe ich zwei Beispieltexte im linken Frame eingefügt, welche untereinander angezeigt werden. Der Text kann auch Zeilenumbrüche enthalten, indem man \n in der Zeichenkette nutzt:

Python
11
12
13
14
leftLabel1 = Label(leftFrame, text="Platzhalter Text")
leftLabel1.grid(row=0, column=0, padx=10, pady=3)
leftLabel2 = Label(leftFrame, text="Dies ist ein Text\nmit mehreren Zeilen.")
leftLabel2.grid(row=1, column=0, padx=10, pady=3)

Labels können außerdem dazu genutzt werden, um Bilder anzuzeigen. Falls wir bereits ein Bild gespeichert haben, können wir dieses nutzen. Ansonsten geben wir im Terminal einfach kurz folgenden Befehl ein, womit wir ein Platzhalter Bild herunterladen:

wget http://placehold.it/200x200

Mit einem zusätzlichen Parameter können wir dem Label ein Bild zuweisen:

Python
16
17
imageEx = PhotoImage(file = '200x200')
Label(leftFrame, image=imageEx).grid(row=2, column=0, padx=10, pady=3)

Führen wir das Skript aus, bekommen wir ein folgendes Programm zu Gesicht:

Wie du siehst, passt sich der Platz des Frames an. Mit einem größeren Y-Padding könnten wir den Frame wieder vergrößern.

 

Eingabefelder (Inputs)

Nun kommen wir zum rechten Frame. Als erstes wollen wir hier eiu Eingabefeld erstellen, welches später z.B. für Benutzereingaben genutzt werden kann.

Ein solches Feld erstellen wir mit diesem Befehl:

Python
23
24
E1 = Entry(rightFrame, width=50)
E1.grid(row=0, column=0, padx=10, pady=3)

Die Breite ist hier allerdings nicht in Pixeln, sondern in Zeichen angegeben, welche gleichzeitig angezeigt werden können.

Was du noch für das Eingabefeld definieren kannst, steht in der Dokumentation.

 

Button

In dem Layout von oben sind als nächstes zwei Buttons zu sehen. Nun sollen diese natürlich auch Funktionen bekommen. Dazu soll der rote Knopf die Eingabe des vorher erstellten Textfelds auslese und der gelbe Button einfach das Ergebnis aus 1+1 ausgeben (da dies nur zu Vorführungszwecken dient, sehen wir mal über die Sinnhaftigkeit des gelben Buttons hinweg 😉 ).

Wir erstellen dazu erst einmal zwei Funktionen, wovon die erste nur den Wert des eben erstellen Textfeldes (E1) ausließt und im Terminal ausgibt. Die zweite Funktion, gibt einfach „2“ aus. Die Funktionen werden gleich den Buttons übergeben.

def callback1():
    print(E1.get())
 def callback2():
    print(1 + 1)

Bevor wir nun die Buttons erstellen, öffnen wir noch ein weiteres Layout für die horizontal angeordneten Buttons.
Die Buttons an sich sind schnell erstellt und bekommen einen Text, eine Hintergrundfarbe („bg“ in HEX), eine Breite (width) sowie eine Funktion (command). Diese Funktion wird aufgerufen, sobald der jeweilige Button gedrückt wurde.

Python
31
32
33
34
35
36
37
38
buttonFrame = Frame(rightFrame)
buttonFrame.grid(row=1, column=0, padx=10, pady=3)
 
B1 = Button(buttonFrame, text="Button 1", bg="#FF0000", width=15, command=callback1)
B1.grid(row=0, column=0, padx=10, pady=3)
 
B2 = Button(buttonFrame, text="Button 2", bg="#FFFF00", width=15, command=callback2)
B2.grid(row=0, column=1, padx=10, pady=3)

Wenn wir nun etwas eingeben und Button 1 drücken, erscheint die Eingabe im Terminal:

 

Slider / Schieberegler

Zu guter Letzt wollen wir noch einen Slider erstellen. Dieser ist quasi eine grafische Darstellung eines numerischen Eingabefelds mit vordefinierten Bereich (z.B. von 0-180). In der unteren Aufgabe wird dieser auch gebraucht. Darüber hinaus kann die Schrittgröße (resolution) angegeben werden, was im Endeffekt der Genauigkeit entspricht.

Den Code erweitern wir wie folgt:

Python
40
41
Slider = Scale(rightFrame, from_=0, to=100, resolution=0.1, orient=HORIZONTAL, length=400)
Slider.grid(row=2, column=0, padx=10, pady=3)

Und damit ist unser Programm auch fertig:

Tipp: Auch bei Slidern kann wieder der Command Parameter genutzt werden (allerdings sollte die Funktion dafür einen Eingabeparameter akzeptieren).

 

Weiteres

Neben den hier vorgestellten Elementen, gibt es noch viele weitere, u.a. Canvas, mit welchen man Zeichnungen / Skizzen erstellen kann. Da dies den Rahmen des Tutorials sprengen würde, leite ich an dieser Stelle mal auf die Dokumentation weiter, da dort auch alle verfügbaren Komponenten aufgelistet sind. Auf den Unterseiten findest du außerdem noch Beispielcode.

 

Zusammenfassung & Ausführung

Falls du bei einem der Punkte nicht mitgekommen bist bzw. du dein Skript noch einmal vergleichen willst, gibt es hier noch einmal die komplette Fassung:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from tkinter import *
 
root = Tk() # Fenster erstellen
root.wm_title("Raspberry Pi GUI") # Fenster Titel
root.config(background = "#FFFFFF") # Hintergrundfarbe des Fensters
 
# Hier kommen die Elemente hin
leftFrame = Frame(root, width=200, height = 400)
leftFrame.grid(row=0, column=0, padx=10, pady=3)
 
leftLabel1 = Label(leftFrame, text="Platzhalter Text")
leftLabel1.grid(row=0, column=0, padx=10, pady=3)
leftLabel2 = Label(leftFrame, text="Dies ist ein Text\nmit mehreren Zeilen.")
leftLabel2.grid(row=1, column=0, padx=10, pady=3)
 
imageEx = PhotoImage(file = '200x200')
Label(leftFrame, image=imageEx).grid(row=2, column=0, padx=10, pady=3)
 
 
rightFrame = Frame(root, width=400, height = 400)
rightFrame.grid(row=0, column=1, padx=10, pady=3)
 
E1 = Entry(rightFrame, width=50)
E1.grid(row=0, column=0, padx=10, pady=3)
 
def callback1():
    print(E1.get())
def callback2():
    print(1 + 1)
 
buttonFrame = Frame(rightFrame)
buttonFrame.grid(row=1, column=0, padx=10, pady=3)
    
B1 = Button(buttonFrame, text="Button 1", bg="#FF0000", width=15, command=callback1)
B1.grid(row=0, column=0, padx=10, pady=3)
 
B2 = Button(buttonFrame, text="Button 2", bg="#FFFF00", width=15, command=callback2)
B2.grid(row=0, column=1, padx=10, pady=3)
 
Slider = Scale(rightFrame, from_=0, to=100, resolution=0.1, orient=HORIZONTAL, length=400)
Slider.grid(row=2, column=0, padx=10, pady=3)
 
 
root.mainloop() # GUI wird upgedatet. Danach keine Elemente setzen
 

Du kannst diesen Code z.B. per SSH oder FTP ganz einfach auf den Raspberry Pi laden. Falls du dich per SSH verbunden hast, rufst du folgenden Befehl im entsprechenden Ordner auf:

sudo nano gui.py

Nachdem du den Code eingefügt hast (geht in Putty per Rechtsklick), speicherst du mit STRG+O. Anschließend kehrst du mit STRG+X in die Kommandozeile zurück.

Die Ausführung solltest du allerdings nicht von der Remote-Kommandozeile ausführen, sondern im Desktop Modus:

sudo python3 gui.py

 

Testaufgabe + Lösung

Wie versprochen gibt es noch eine kleine Testaufgabe: Erstelle eine neue Programmoberfläche, die lediglich einen Slider enthält, mit welchem ein GPIO gesteuert wird. Im Speziellen soll der Winkel eines Servomotors gesteuert werden.

Falls du noch nicht mit Servomotoren vertraut bist, hilft ein Blick in dieses Tutorial. Im nächsten Teil dieser Reihe werden wir PWM noch genauer betrachten.

Falls du soweit bist (oder nicht weiter kommst) findest du hier die Lösung:

Wie im Tutorial erklärt verbinden wir den Servomotor zunächst:

Anschließend erstellen wir eine neue Datei (z.B per Terminal):

sudo nano servogui.py

Hier kommt folgender Inhalt hinein:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from tkinter import *
import RPi.GPIO as GPIO
 
SERVO_PIN = 17
 
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(SERVO_PIN, GPIO.OUT)
 
pwm = GPIO.PWM(SERVO_PIN, 50) # GPIO 18 als PWM mit 50Hz
pwm.start(2.5) # Initialisierung
 
def changeServoAngle(angle):
    d = float(angle) / 20.0 + 2.5
    pwm.ChangeDutyCycle(d)
 
# GUI
root = Tk()
root.wm_title('Servo Control GUI')
scale = Scale(root, from_=0, to=180, orient=HORIZONTAL, length=400, command=changeServoAngle)
scale.grid(row=0, column=0, padx=10, pady=3)
root.mainloop()
 
 

Anschließend speichern wir und führen die Datei nur noch aus:

sudo python3 servogui.py

Sofern dein Motor korrekt verbunden ist, kannst du ihn nun mittels des Schiebereglers per GUI steuern. Details zu PWM gibt es dann im nächsten Tutorial.

Übrigens: Da Python und Tkinter ebenso auf Windows und MacOS laufen, kann damit natürlich auch eine Programmoberfläche für PCs und Macs erstellt werden.

Teilen Facebook Twitter Pinterest LinkedIn Tumblr Email
Vorheriger BeitragHow to connect and control a Raspberry Pi WS2801 RGB LED Strip
Nächster Beitrag Fotowiderstand (Helligkeitssensor) am Raspberry Pi

Ähnliche Beiträge

So installierst du Google Chromium auf dem Raspberry Pi

Raspberry Pi Pico: Programmieren mit dem günstigen Mikrocontroller

Raspberry Pi Kamera per GPIO Knopfdruck auslösen

Raspberry Pi Betriebssystem auf eine SD Karte flashen (Windows, Mac, Linux)

56 Kommentare

  1. ThreeDogs am 9. April 2017 14:54

    Sehr Hilfreicht…Gut gemacht.

    Geht es mit Qt5 und Python auf der RPi3?

    Antworten
  2. Skipper am 9. April 2017 15:27

    Geile Sache, das!!!
    Damit komm ich nen Riesenschritt weiter in meinem Projekt…

    Super Tut!!!

    Fragen hab ich trotzdem…
    Frage 1: Benötigt der Raspi dafür ne Desktopumgebung, oder läuft diese GUI auch ohne?

    Frage 2: Wie kann man Registerkarten / Reiter programmieren?

    LG Skipper

    Antworten
    • Felix am 9. April 2017 20:41

      Hi,
      eine GUI (Graphical User Interface) ist in den allermeisten Fällen an eine Desktop Umgebung gebunden. Irgendwo willst du sie ja anzeigen.
      Wenn du mit 2. Tabs meinst, dann ja: Schau mal z.B. hier: http://www.tkdocs.com/tutorial/complex.html (ganz unten)

      Antworten
      • Skipper am 12. April 2017 11:07

        Hallo Felix…

        Zu 1.
        Anzeigen will ich das ganze auf nem kleinen Touchscreen, wollte mir aber – wenn möglich – die Desktopumgebung einsparen, zumal diese GUI immer im Vollbild ausgeführt werden und auch direkt beim Start geladen werden soll..

        Zu 2.
        Genau diese Dinger meinte ich.. Früher hießen die mal „Reiter“ oder „Registerkarten“, heute heißen sie dann eben „Tabs“…

        Ich hätte die Tabs gern am unteren Bildschirmrand, geht das auch?

        LG Skipper

      • Felix am 12. April 2017 11:10

        Hey,
        naja, auf dem Touchscreen würde ja auch eine Desktopumgebung angezeigt werden (auch wenn es im Vollbild ist).
        Bzgl der zweiten Frage: Schau mal hier, da hat jemand ein Beispiel gepostet.
        LG, Felix

      • Skipper am 14. April 2017 15:57

        Jo!!! Das läuft!!! Super… Danke… ;))

  3. björn am 10. April 2017 18:31

    das find ich ja klasse
    mit übungsaufgaben wie ich es vorgeschlaegn hatte leider kann ich die derzeit nich machen muss erst ein neune pi ordern. meiner ist an die wand gedübelt und macht mit dem ws2812b und hyperion meine stube bund 🙂

    aber ich holle es nach versprochen

    Antworten
  4. Jörg Michael Günther am 10. April 2017 20:08

    Ich habe ein Problem
    Nachdem ich fleissig eingetippt hab und auch nachdem ich nochmal alles per drag and drop eingefügt hab bekomme ich folgende Fehlermeldung

    pi@vaexthus1:~/python-GUI $ sudo python3 gui.py
    File „gui.py“, line 24
    print(E1.get())
    ^
    IndentationError: expected an indented block

    Wie gesagt, es handelt sich um den Originalcode

    Antworten
    • Felix am 10. April 2017 21:18

      Ups, da sind die Leerzeichen am Anfang verloren gegangen. Habe ich nun verbessert 🙂

      Antworten
  5. Martin am 11. April 2017 12:44

    Hi,
    bei mir klappt bereits das Einrichten des Fensters nicht. Wenn ich das Fenster starte bekomme ich in der letzten Zeile root.mainloop() einen SyntaxError angezeigt „root“ ist rot hinterlegt (python 3.4.2)
    Was ist da los?
    Martin

    Antworten
    • Felix am 11. April 2017 20:04

      Davor hast du aber root = tk() erstellt?

      Antworten
      • Martin am 11. April 2017 23:16

        ja,habe ich. Allerdings genau abgeschrieben Zeile 3:
        root = Tk() #…
        auch nach Änderung in root=tk() gleiches Ergebnis. Den Ordner python-GUI und darin die Datei gui.py habe ich auch zuvor erstellt, und auch tkinter (nicht, denn war schon vorher) installiert – kleingeschrieben wg. python3.

  6. Tim am 12. April 2017 16:40

    Hi,
    bei mir kommt, sobald man versucht den Platz fuer das Bild einzufuegen die Meldung, dass das Bild nicht existiert.
    Es liegt an folgendem Teil des Codes (Habs in der Shell getestet):
    imageEx = PhotoImage(file = ‚200×200‘)
    und
    Label(leftFrame, image=imageEx).grid(row=2, column=0, padx=10, pady=3)

    Die Meldung zum Ersten:

    Traceback (most recent call last):
    File „“, line 1, in
    imageEx = PhotoImage(file = ‚200×200‘)
    File „/usr/lib/python3.4/tkinter/__init__.py“, line 3419, in __init__
    Image.__init__(self, ‚photo‘, name, cnf, master, **kw)
    File „/usr/lib/python3.4/tkinter/__init__.py“, line 3375, in __init__
    self.tk.call((‚image‘, ‚create‘, imgtype, name,) + options)
    _tkinter.TclError: couldn’t open „200×200“: no such file or directory

    Und zum zweiten:

    Traceback (most recent call last):
    File „“, line 1, in
    Label(leftFrame, image=imageEx).grid(row=2, column=0, padx=10, pady=3)
    NameError: name ‚imageEx‘ is not defined

    Ich hab echt keine Ahnung
    Danke fuer deine Hilfe 🙂

    Antworten
    • Felix am 12. April 2017 18:46

      Geh mal per Dateiexplorer und schau, ob das Bild da ist und du es öffnen kannst.

      Antworten
  7. Martin am 18. April 2017 11:03

    Hallo Felix,
    da sich das alles für mich besser auf dem Bildschirm meines Notebooks darstellt und bearbeiten lässt, habe ich mir python 3.5.1 auf dem Notebook installiert. Für Arbeiten am GUI ist es nicht nötig, dass ich den Pi benutze, da ja alles sich nur am Bildschirm abspielt und kein Zugriff auf die Pins der GPIO gebraucht wird.
    Bis zum Einbinden der Grafik geht das. Den Befehl „wget http://placehold.it/200×200“ kann ich allerdings mit einem Windows-Rechner nicht nachvollziehen. Wie kann ich – unter python3 auf Windows-Rechnern- ein (vorhandenes) Foto oder Bild in das GUI einfügen?
    Gruß Martin

    Antworten
    • Felix am 18. April 2017 19:33

      Auf Windows kannst du den Link einfach im Browser öffnen und das Bild im entsprechenden Verzeichnis laden.

      Antworten
  8. phantomaniac am 24. April 2017 14:13

    Evtl. eine dumme Anfängerfrage…
    Aber ich würde das „GUI“ gerne im Browser, also Remote ausführen. Kannst Du da evtl. noch ein Tutorial machen ?

    Also ähnlich im obigen Beispiel den Servomotor ansteuern, aber eben über dem Browser von einem PC, oder Tablett aus….

    Antworten
    • Felix am 24. April 2017 14:16

      Eine Python GUI kannst du nicht über den Browser ausführen. Was du brauchst in ein Webserver. Schau mal hier rein: Raspberry Pi Node.js Webserver installieren und GPIOs schalten

      Antworten
  9. Unimogler am 21. August 2017 16:59

    Ich hoffe mir kann von euch jemand helfen.

    Wie kann ich einen Frame z.B. wie in Zeile 8 und 9 mit einer bestimmte Farbe („#99ccff“)
    Füllen?? Quasie wie beim Background.

    Danke schonmal im Vorraus!

    LG Unimogler

    Antworten
    • Felix am 13. September 2017 19:38

      z.B. indem du die Farbe mittels bg="99ccff" mit angibst: http://effbot.org/tkinterbook/frame.htm

      Antworten
  10. Florian am 1. September 2017 8:04

    Hi
    Ich habe das Programm etwas geändert um ein Motor rechts oder links laufen zu lassen und die Geschwindigkeit mit einem Slider zu regeln nur ist das Problem das wenn ich links rum laufen lasse ist bei dem Regler 100% = 0% und 0% = 100

    Antworten
  11. Raphael am 6. September 2017 17:18

    Hallo,
    Ich habe das Programm etwas umgeschrieben, so dass ich die GPIO pins ansteuern kann, (mit einem Button „GPIO high“, mit dem anderen „GPIO low“) funktioniert auch soweit. Jetzt meine frage: ist es möglich, mit dem selben Button einen GPIO Pin Ein und Aus zu Schalten?
    Vielen Dank im Vorraus
    Mfg

    Antworten
    • Felix am 13. September 2017 20:39

      Ja, z.B. indem du den Status speicherst (initial = aus, drücken negiert den aktuellen Status).

      Antworten
  12. Uwe am 8. November 2017 23:56

    Super Anleitung. Ich möchte beim Start des reapberry, das das programm ausgeführt und auf dem touchdisplay angezeigt wird. Wie stelle ich da an?

    Antworten
  13. Manfred Osthoff am 14. Dezember 2017 13:34

    Hallo Felix. Das erste Fenster wird bei mir erst garnicht dargestellt. Ich habe alles nach deiner Beschreibung gemacht (hoffe ich). Um einen Fehler zu finden, hier mein Skript:
    Die Datei „gui.py“

    from tkinter import *
    
    root = Tk() # Fenster erstellen
    root.wm_title("Raspberry Pi GUI") # Fenster Titel
    root.config(background = "#FFFFFF") # Hintergrundfarbe des Fensters
    
    # Hier kommen die Elemente hin
    
    root.mainloop() # GUI wird upgedated. Danach keine Elemente setzen

    Fehlermeldung nach ausführen des Befehls „sudo python3 gui.py“

    pi@raspberrypi:~/python-GUI $ sudo python3 gui.py
    Traceback (most recent call last):
    File „gui.py“, line 3, in
    root = Tk() # Fenster erstellen
    File „/usr/lib/python3.5/tkinter/__init__.py“, line 1880, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
    _tkinter.TclError: no display name and no $DISPLAY environment variable

    Das File „/usr/lib/python3.5/tkinter/__init__.py“ ist vorhanden.

    Kannst du etwas damit anfangen, ich nicht?

    Antworten
    • Felix am 14. Dezember 2017 16:53

      Hast du das ganze über SSH versucht zu starten? Wenn ja, hast du X11 o.ä. installiert? Falls nein, kann das so nicht klappen (GUI braucht ein Display).

      Antworten
  14. Manfred Osthoff am 15. Dezember 2017 9:23

    Hallo Felix, habe die halbe Nacht versucht, den Fehler zu finden. Des Rätzels Lösung ist: der Befehl zu starten des Skrips muss wohl offentsichtlich im Terminal des Raspi erfolgen, denn da geht das konstruierte Fenster auf. Ich hatte es per SSH in Putty auf dem PC versucht.

    Antworten
    • Felix am 15. Dezember 2017 11:17

      Ja, das hatte ich ja bereits gesagt 🙂 Über Putty bräuchtest du X11 (Xming) und musst dieses in den Putty Einstellungen angeben.

      Antworten
  15. Leo am 17. Dezember 2017 15:15

    Hi Felix,

    danke für deine Tutorials, sehr lehrreich!

    Ich stolpere über ein Problem, das ich selbst durch ewige Google-Sucht nicht gelöst bekomme: ich schaffe es nicht, die Farben der Buttons zu ändern. Ich arbeite auf MAC und Python 3, die Buttons behalten immer einen weißen Hintergrund, egal, was ich versuche. bg, background, activebackbround, activeforeground… egal welche Werte ich für die Farbe definiere, die Buttons bleiben weiß.

    Irgendeine Idee, was ich falsch mache?

    Viele Grüße,
    Leo

    Antworten
    • Leo am 17. Dezember 2017 19:20

      …lässt sich nicht lösen, sorry, habs nach x Versuchen selbst gefunden: https://stackoverflow.com/questions/1529847/how-to-change-the-foreground-or-background-colour-of-a-tkinter-button-on-mac-os

      Antworten
  16. Michael am 14. Januar 2018 13:55

    hallo felix
    ich hab da eine frage ich würde das ganze gerne mit der pigpio Bibliothek machen kannst du mir da helfen bitte hab leider keine idee wie ich die def mache
    mfg

    Antworten
    • Felix am 14. Januar 2018 22:35

      Was meinst du? Eine def also (Python) Funktion?

      Antworten
      • Michael am 17. Januar 2018 18:15

        hi felix
        also mein servo hat max anschläge von 650 bis 2100msec und ich weis leider nicht wie ich die definition dazu schreibe das 1 vom slider 650msec sind und 180 vom slider 2100
        danke schonmal für deine hilfe

  17. Thomas am 29. Januar 2018 12:46

    Super Tutorial danke dafür. Ich habe aber eine Frage. Ist es möglich, dass wenn ich auf n Button klicke auf eine neue Seite komme? Sprich am Anfang habe ich 4 Auswahlmöglichkeiten und möchte danach dann auf einer anderen Seite weiter arbeiten. also z.B. ein anderes Skript öffnen. Wie ein Goto befehl oder so.

    Antworten
    • Felix am 29. Januar 2018 20:29

      Ja, z.B. erstellst mehrere Frames, die das ganze Fenster abdecken und darin deinen Inhalt. Dann schaltest du bestimmte Frames (un)sichtbar.

      Antworten
  18. Axel am 9. Februar 2018 11:50

    Hallo Felix,
    ich hoffe du kannst mir helfen.
    Ich habe ein zyklisch ablaufendes Programm. z.B. ein Regler
    Wie kann ich das GUI mit meinem Programm verknüpfen, sodass ich mit den Buttons das zyklische Programm ein oder ausschalte und einen Wert übergeben kann.
    Mein Problem ist, wenn ich in der Schleife des Programmes drin bin wird kein Button mehr abgefragt.
    Vielleicht hast du auch eine andere Lösung.
    Vielen Dank schon mal

    Antworten
    • Felix am 9. Februar 2018 13:08

      Du könntest threads nutzen.

      Antworten
  19. Michel am 18. Februar 2018 0:56

    Hallo,
    ich habe ein Gui erstellt, möchte nun aber ein menü erstellen mit mehreren unter menüs die alle die selbe optik haben.
    Damit die Dateien aber sauber bleiben möchte ich das Grunddesign auslagern, aber wenn ich dies nur in einer anderen datei importiere wie erstelle ich dafür frames?

    Antworten
    • Felix am 18. Februar 2018 11:38
      import funktionsname from dateiname
      Antworten
      • Michel am 18. Februar 2018 15:50
        import tkinter as tk
        
        def menu():
            menu=tk()
            menu.config(background= "#01DF01")
            menu.geometry("{0}x{1}+0+0".format(menu.winfo_screenwidth(), menu.winfo_screenheight()))
            menu.overrideredirect(True)
            menu.mainloop()
        
        def menu():
            menu=tk()
            menu.config(background= "#01DF01")
            menu.geometry("{0}x{1}+0+0".format(menu.winfo_screenwidth(), menu.winfo_screenheight()))
            menu.overrideredirect(True)
            menu.mainloop()

        das ist erstmal das grundmodel
        wie erstelle ich nun nach dem ich die funktion importierte habe dafür ein frame?

        mit:

        from menu import menu
        from tkinter import *
        
         ersteFrame = Frame(menu, width=200,height=400)
        ersteFrame.grid(row=0, column=0, padx=0,pady=0)

        bekomme ich nur die Fehlermeldung:
        function object has no attribute ‚tk‘

        das modul menu alleine läuft aber ohne fehlermeldung ab
        Sorry für schlechte Grammatik und rechtschreibung schreibe von Unterwegs

      • Felix am 18. Februar 2018 15:53

        Entweder from tkinter import * oder mit tk.tk()
        Außerdem hast du zwei mal eine Funktion drin, die gleich heißt.

  20. Michel am 18. Februar 2018 16:47

    ohh ne ist nur eine funktion habe ich nur doppelt hier kopiert
    teste ich gleichmal danke schonmal

    Antworten
  21. Sven am 14. August 2018 23:54

    Hallo Felix, super Anleitunng :-)!!! Mein Problem ist nur, daß ich ein 1024*600er Touch benutze. Die größe der Frames habe ich ausgeglichen, aber meine eigendliche Frage ist: Wie bekomme ich die Text, Eingabefelder und Button´s größer dargestellt? Zum Touch und Lesen braucht man eine Lupe. Danke Sven

    Antworten
  22. Sven am 15. August 2018 0:55

    Hallo Felix, sorry :-). Die Frage hat sich erledigt. Ich hatte nur im Internet gelesen, dass die Auflösung Probleme macht, aber die Auflösung kann ja im LINUX selber eingestellt werden. 😉

    Antworten
  23. Marcel am 3. Dezember 2018 19:06

    Hallo zusammen,

    ich habe eine Funktion mit der ich das Fenster per Knopfdruck in den Fullscreen setzen kann. Leider weiß ich jetzt nicht weiter, wo und wie ich die Frames anlegen muss. Ohne meine Funktion hat es super geklappt. Allerdings würde ich gerne die Funktion mit dem Fullscreen beibehalten oder lässt sich die Fullscreen-Option auch in deinem Beispiel von oben realisieren? LG Marcel

    Wie Poste ich hier den Code? 😀 Dann könnte ich euch meinen Code mal zeigen.

    Antworten
  24. Bernhard Junk am 23. Januar 2019 23:03

    Hallo,
    ich habe das servoGUI nachvollzogen aber ich habe hier ein Adafruit PCA9685 mit 6 Servos.
    Das Programm läuft soweit aber ich möchte in die GUI sliders für die Servos integrieren.
    Im Beispiel ist aber die Ansteuerung über GPIOs aufgelistet. Wie übergebe ich die Werte der Servos an die PCA9685?
    Bernd

    Antworten
    • Uli Franck am 12. Januar 2020 12:12

      Hallo Berhard,
      ich habe das gleiche Problem.
      hast du eventuell eine Antwort bekommen und könntest mir dein Programm zur Verfügung stellen?
      gruß Uli

      Antworten
    • Wolfgang Schwarz am 21. April 2020 22:54

      Hallo Bernhard,
      ich hing auch an diesem Problem fest. Deshalb hab ich mir auf Grund der erzwungenen Freizeit (Corona) ein Python3-Script geschrieben (naja, zum Teil zusammengepickt). Es ist eine GUI mit
      7 Schiebereglern, die je einem PCA9685-Ausgang zugeordnet sind (zB. Modell-Roboterarm).
      Das kann ich hier zur Verfügung stellen, wenn es jemand wünscht.

      Grüssle
      Wolfgang
      PS. wie kann ich hier ne Datei anhängen?

      Antworten
  25. Hans-Jürgen am 5. März 2019 23:11

    Moin zusammen,
    ich bin ein absoluter Neuling bei python. Habe versucht, dieses Kapitel des Tutorials mal „durchzuarbeiten“, scheitere aber gleich am Anfang .
    Vorbereitung mit
    sudo apt-get install python python-tk idle python-pmw python-imaging –yes
    Verzeichnis angelegt, gui.py angelegt
    gui.py geöffnet und Code eingegeben, tkinter klein geschrieben,
    Schon bei (hier testdatei gui3.py)
    root = Tk()
    kommen Fehlermeldungen??

    habe die diversen Fehlermeldungen in einer doc Datei zusammengestellt, kann ich die irgendwie hochladen?

    Antworten
  26. André Leibeling am 11. März 2019 17:02

    Hi,
    das funktioniert leider nicht im Autostart

    sudo crontab -e
    @reboot /usr/bin/sudo /usr/bin/python3 /home/pi/gui.py

    wie kann ich veranlassen das die gui immer maximiert geöffnet wird?

    Besten Dank & Gruss

    Antworten
  27. Michael am 7. April 2019 15:12

    Echt klasse wie du alles Erklärst! ! Danke

    Antworten
  28. der Micha am 24. April 2019 16:49

    Fehler im Programmcode:
    def callback2():
    print(1 + 1)

    muss heissen:
    def callback2():
    print((1 + 1) )

    Antworten
  29. Matzetoff am 28. Mai 2019 11:44

    Ich habe folgendes Problem:
    Ich wollte nun statt dem Platzhalter mein eigenes Bild einfügen. Ich habe es runter geladen und in den „python-GUI“ Ordner gelegt. Nun habe ich lediglich statt „imageEX = PhotoImage(file = ‚200×200‘)“ mein eigenes Bild bei „200×200“ eingefügt. Daraus folgt folgende Fehlermeldung:
    File „/home/pi/python-GUI/gui.py“, line 22, in
    imageEx = PhotoImage(file = ‚albakom logo‘)
    File „/usr/lib/python3.5/tkinter/__init__.py“, line 3406, in __init__
    Image.__init__(self, ‚photo‘, name, cnf, master, **kw)
    File „/usr/lib/python3.5/tkinter/__init__.py“, line 3362, in __init__
    self.tk.call((‚image‘, ‚create‘, imgtype, name,) + options)
    _tkinter.TclError: couldn’t recognize data in image file „albakom logo“

    Antworten
  30. Bernhard Junk am 24. Juli 2019 15:34

    Habe das Programm nochmal gestartet, aber der Servo ruckelt nur.
    Weiss leider nicht warum.
    Anschlüsse: rot an Pin1, schwarz an Pin 6 und GPIO17 an Pin 11.

    Antworten
  31. Merlin am 22. Januar 2020 15:27

    Hat Super Geklappt DANKEEEE <3

    Antworten
  32. Thomas am 4. Mai 2020 11:15

    Hallo ich habe eine Frage
    welche IDE wird hier verwendet, dass man die Zeilennummer und die gleichen Farben für Kommentare etc. sieht?
    Habe es mal in Thonny programmiert und wenn ich dort das Programm laufen lasse öffnet sich die gui allerdings funktioniert es nicht wenn ich es über das Terminal aufrufe.
    Habe einen Raspi 4 und Rapsbian Noobs installiert als OS

    Antworten

Hinterlasse einen Kommentar Antwort abbrechen

Raspberry Pi der 4. Generation vorgestellt – Neuer Mini Desktop Computer

Mit dem ESP8266 WS2812B LED Strips am Smartphone steuern

Raspberry Pi LED MAX7219 Dot Matrix – Projektübersicht

Raspberry Pi Hausautomatisierung: OpenHAB installieren & konfigurieren

10.1″ Raspberry Pi 4 Tablet – Review des RasPad 3

MCP3008: Am Raspberry Pi analoge Signale auslesen

Blog abonnieren

Abboniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!

Tutorials for Raspberry Pi
Facebook Twitter YouTube
  • Kontakt & Impressum
  • Unterstützen
  • Datenschutz

Tippe den Suchbegriff oben ein und drücke Enter, um danach zu suchen. Drücke Esc, um abzubrechen.