i

Einbindung von Bildern

Zielsetzung

Die Benutzeroberfläche soll attraktiver gestaltet werden, indem Würfelergebnisse nicht textuell, sondern grafisch dargestellt werden.

Anwendungsfenster

PhotoImage-Objekte

Das folgende Testprogramm zeigt, wie man ein Bild in die Benutzeroberfläche einbinden kann.

from tkinter import *
# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title("Test")
tkFenster.geometry("120x110")
# Rahmen Würfel
frameWuerfel = Frame(master=tkFenster,
                     background="#FBD975")
frameWuerfel.place(x=5, y=5, width=110, height=100)
# Bilder
imageWuerfel1 = PhotoImage(file="w1.gif")
# Label Würfel B
labelWuerfelB = Label(master=frameWuerfel, image=imageWuerfel1)
labelWuerfelB.place(x=40, y=35, width=30, height=30)
# Aktivierung des Fensters
tkFenster.mainloop()
Python

Dieses Testprogramm erzeugt die folgende Benutzeroberfläche.

Test

Mit einem PhotoImage-Objekt kann man Pixelgrafik-Bilder verwalten. Ein bereits in einer Datei abgespeichertes Bild kann direkt bei der Erzeugung des PhotoImage-Objekts an dieses Objekt gebunden werden. Hierzu muss dem file-Attribut der Pfad zur Bilddatei als Wert zugewiesen werden. Beachte, dass die Bilddatei im Format GIF, PPM oder PGM vorliegen muss.

Um ein PhotoImage-Objekt auf der Benutzeroberfläche darzustellen, muss es an eine GUI-Komponente (z. B. ein Schriftfeld) angebunden werden. Hierzu wird das image-Attribut des betreffenden GUI-Objekts geeignet gesetzt.

Aufgabe 1

Führe das Testprogramm aus. Variiere auch das Bild, das angezeigt werden soll. Zur Darstellung von Würfelergebnissen kannst du die Bilddateien w1.gif, w2.gif, w3.gif, w4.gif, w5.gif und w6.gif verwenden.

Aufgabe 2

Das folgende Programm zeigt, wie man Bilder dynamisch wechseln kann. Ergänze das Programm so, dass drei Würfel mit geeigneten Bildern angezeigt werden.

from tkinter import *
from random import randint
# Ereignisverarbeitung

def Button_Wuerfel_Click():
    # Verarbeitung der Daten
    wuerfelB = randint(1,6)
    # Verwaltung und Anzeige der Daten
    labelWuerfelB.config(text=str(wuerfelB))
    # Anzeige der Daten
    if wuerfelB == 1:
        labelWuerfelB.config(image=imageWuerfel1)
    elif wuerfelB == 2:
        labelWuerfelB.config(image=imageWuerfel2)
    elif wuerfelB == 3:
        labelWuerfelB.config(image=imageWuerfel3)
    elif wuerfelB == 4:
        labelWuerfelB.config(image=imageWuerfel4)
    elif wuerfelB == 5:
        labelWuerfelB.config(image=imageWuerfel5)
    elif wuerfelB == 6:
        labelWuerfelB.config(image=imageWuerfel6)

# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title("Test")
tkFenster.geometry("120x110")
# Rahmen Würfel
frameWuerfel = Frame(master=tkFenster,
                     background="#FBD975")
frameWuerfel.place(x=5, y=5, width=110, height=100)
# Label mit Überschrift für die Würfel
labelUeberschriftWuerfel = Label(master=frameWuerfel,
                                 text="Würfel",
                                 background="white")
labelUeberschriftWuerfel.place(x=5, y=5, width=100, height=20)
# Bilder
imageWuerfel1 = PhotoImage(file="w1.gif")
imageWuerfel2 = PhotoImage(file="w2.gif")
imageWuerfel3 = PhotoImage(file="w3.gif")
imageWuerfel4 = PhotoImage(file="w4.gif")
imageWuerfel5 = PhotoImage(file="w5.gif")
imageWuerfel6 = PhotoImage(file="w6.gif")
# Label Würfel B
labelWuerfelB = Label(master=frameWuerfel,
                      image=imageWuerfel1)
labelWuerfelB.place(x=40, y=35, width=30, height=30)
# Button zum Würfeln
buttonWuerfel = Button(master=frameWuerfel,
                       text="Wuerfel werfen",
                       command=Button_Wuerfel_Click)
buttonWuerfel.place(x=5, y=75, width=100, height=20)
# Aktivierung des Fensters
tkFenster.mainloop()
Python

Aufgabe 3

Die Anzeige des jeweils passenden Bildes in der Prozedur Button_Wuerfel_Click ist nicht elegant gelöst. Die folgende Programmversion zeigt eine bessere Lösung. Was ist hier anders gemacht?

from tkinter import *
from random import randint
# Ereignisverarbeitung

def Button_Wuerfel_Click():
    # Verarbeitung der Daten
    wuerfelB = randint(1,6)
    # Verwaltung und Anzeige der Daten
    labelWuerfelB.config(text=str(wuerfelB))
    labelWuerfelB.config(image=imageListe[wuerfelB-1])

# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title("Test")
tkFenster.geometry('120x110')
# Rahmen Würfel
frameWuerfel = Frame(master=tkFenster,
                     background="#FBD975")
frameWuerfel.place(x=5, y=5, width=110, height=100)
# Label mit Überschrift für die Würfel
labelUeberschriftWuerfel = Label(master=frameWuerfel,
                                 text="Würfel",
                                 background="white")
labelUeberschriftWuerfel.place(x=5, y=5, width=100, height=20)
# Bilder
imageListe = [
    PhotoImage(file="w1.gif"),
    PhotoImage(file="w2.gif"),
    PhotoImage(file="w3.gif"),
    PhotoImage(file="w4.gif"),
    PhotoImage(file="w5.gif"),
    PhotoImage(file="w6.gif")
    ]
# Label Würfel B
labelWuerfelB = Label(master=frameWuerfel, image=imageListe[0])
labelWuerfelB.place(x=40, y=35, width=30, height=30)
# Button zum Würfeln
buttonWuerfel = Button(master=frameWuerfel,
                        text="Wuerfel werfen",
                        command=Button_Wuerfel_Click)
buttonWuerfel.place(x=5, y=75, width=100, height=20)
# Aktivierung des Fensters
tkFenster.mainloop()
Python

Aufgabe 4

Ändere die Benutzeroberfläche zum chuck-a-luck-Spiel so ab, dass alle Würfelergebnisse grafisch dargestellt werden. Beachte, dass die Würfelergebnisse nicht nur grafisch angezeigt werden, sondern auch mit dem text-Attribut gespeichert werden (s.o.). Das ist deshalb von Bedeutung, da bei der Ermittlung des Gewinns auf die Würfelergebnisse zurückgegriffen werden muss.

Anwendungsfenster

Suche

9.1.3.3.7Einbindung von Bildern
Kopieren durch Anklicken

Rückmeldung geben