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()

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()

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()

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

v
9.1.3.3.7
www.inf-schule.de/software/gui/miniprojekt_chuckaluck/implementierungeinfachegui/bilder
www.inf-schule.de/9.1.3.3.7
www.inf-schule.de/@/page/pPjSi0py490rXLTj

Rückmeldung geben