Tkinter ist ein Wrapper für das GUI-Toolkit Tk (das ursprünglich für die Programmiersprache Tcl entwickelt wurde) für die Programmiersprache Python. Der Name steht als Abkürzung für Tk interface. Tkinter war das erste GUI-Toolkit für Python, weshalb es inzwischen auf macOS und Windows auch zum Lieferumfang von Python gehört. Im Gegensatz zu anderen GUI- und Graphik-Toolkits ist es also immer da und kann ohne vorherige Installationen verwendet werden.
Ein einfaches »Hallo Welt«-Programm mit einem Bild sieht in Python 3 mit Tkinter so aus:
import tkinter as tk
from PIL import Image, ImageTk
import os
root = tk.Tk()
root.title("Hallöchen, Du verwirrte Schlange")
cw, ch = 400, 400
canvas = tk.Canvas(root, width = cw, height = ch, bg = "royalblue")
canvas.grid(row = 0, column = 0)
path = os.path.join(os.getcwd(), "sources/tkgraphics/images/python-verwirrt.png")
print(os.getcwd())
image = Image.open(path)
schlange = ImageTk.PhotoImage(image)
canvas.create_image(cw//2, ch//2, anchor = tk.CENTER, image = schlange)
canvas.update
root.mainloop()
Es sind in Python 3 einige Unterschiede zu Python 2.7 zu beachten:
Die Schreibweise der Bibliothek hat sich geändert. Statt import Tkinter
heißt es nun import tkinter
.
Statt Graphik-Bibliothek PIL
ist die Verwendung der Fork Pillow
empfehlenswert, da PIL
nicht mit Python 3 spielt.
Pillow kann mit
pip install Pillow
oder – bei einem Anaconda-Python – mit
conda install Pillow
installiert werden.
Ein aktuelles Pillow versteht import Image
nicht mehr, stattdessen muß Image
mit
from PIL import Image
importiert werden. Diese beiden Sachen sind zu beachten, wenn Ihr alte Programm-Listings umschreiben wollt oder müßt.
Ansonsten – wie die Definition der Titelzeile des Programmfensters zeigt – ist Tkinter ziemlich UTF-8-fest. Aber nicht vollständig, Emojis beherrscht Tkinter (respektive Tcl) nicht. Will man zum Beispiel das Emoji für die Schlange »🐍« in obige Titelzeile einschmuggeln, dann bekommt man die Fehlermeldung:
TclError: 'character U+1f40d is above the range (U+0000-U+FFFF) allowed by Tcl'
Also alles, was größer U+FFFF
ist, muß leider außen vor bleiben.
Ansonsten ist die Implementierung straightforward. Es wird ein 400 x 400 Pixel großer Canvas
in das Root-Fenster eingebaut und in diesem das Bild geladen. Pillow wird benötigt, um das Bild zu laden und es in ein Tkimage
zu konvertieren, denn Tk versteht nativ nur seht wenige Bildformate.
Ein kleines Problem ist die Pfadangabe zum Bild: Da ich auf meinen diversen Rechnern verschiedene Pfade zu dem jeweiligen working directory
habe, nutze ich os.getcwd()
um dieses Verzeichnis zu bekommen, um dann mit os.path.join()
den vollständigen Pfadnamen zum Bild zu erhalten.
Wie oben schon angedeutet, wird das Bild dann mit der Pillow-Funktion Image.open()
geladen und mit der Funktion ImageTk.PhotoImage()
in ein Format konvertiert, das Tkinter versteht.
Danach habe ich die verwirrte Schlange mit den Zeilen
canvas.create_image(cw//2, ch//2, anchor = tk.CENTER, image = schlange)
canvas.update
in der Mitte des Canvases anzeigen lassen. Das ist schon alles …
Über …
Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter, Autor, Netzaktivist und Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!
Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.
Der Besuch dieser Webseite wird aktuell von der Piwik Webanalyse erfaßt. Hier können Sie der Erfassung widersprechen.
Diese Seite verwendet keine Cookies. Warum auch? Was allerdings die iframes
von Amazon, YouTube und Co. machen, entzieht sich meiner Kenntnis.
Werbung