461
15.15
Lösungen
15.15 Lösungen
Lösung 1
Skript:
Polyethylen (PE) Polystyrol (PS) Polyvinylchlorid (PVC)
brennbar x x
schwimmt x
Verhalten beim Verbrennen:
rußende Flamme x
duftet nach Wachs x
tropft x
Tabelle 15.7: Eigenschaften einiger Verpackungskunststoffe
# schalter.pyw
from tkinter import *
class Schalter:
def __init__(self):
self.fenster = Tk()
self.label = Label(self.fenster,
width=20, height=5, bg='black')
self.button = Button(self.fenster, text='0 / I',
command=self.schalten) #1
self.label.pack()
self.button.pack(pady=5)
self.ein = 0
self.fenster.mainloop()
d e f sch a l ten ( sel f ) : #2
if self.ein:
self.label.config(bg='black', fg='white',
t ext = ' Lic h t aus ' )
self.ein = 0
else:
self.label.config(bg='white',fg='black',
t ext = ' Lic h t an' )
self.ein = 1
sch a lte r = Sch a l ter ( ) #3
Kapitel 15
Grafische Benutzungsoberflächen mit tkinter
462
Erläuterung:
#1: Ein Button wird erzeugt und an die Methode self.schalten() gekoppelt.
#2: Beim Anklicken des Buttons wird diese Methode aufgerufen. Wenn self.ein ungleich
null ist, wird das Label wie folgt neu konfiguriert. Es erhält einen schwarzen Hintergrund
und die Beschriftung '
Licht aus' in der Schriftfarbe (fg) Weiß.
Wenn das Attribut
self.ein gleich null ist, wird der Hintergrund des Labels weiß und es
trägt den Text '
Licht an' in schwarzer Schrift.
#3: Ein Objekt der Klasse Schalter wird instanziiert.
Lösung 2
Skript:
# waehrungen.pyw
from tkinter import *
class Waehrungsrechner:
kurs = {'USD':1.4699,
' G BP': 0 .92 0 6} #1
def __init__(self):
self.fenster = Tk()
self.fenster.title('W\xe4hrungen')
self.euros = DoubleVar() #2
self.waehrung = StringVar() #3
self.ausgabe = StringVar()
Label(self.fenster,
text='Geben Sie einen Betrag in Euro ein\n' +\
'und wählen Sie eine Währung' ,
width=30, height=3,
font=('Arial', 12), fg='blue').pack() #4
Entry(self.fenster, textvariable=self.euros).pack()
usd_button = Radiobutton(self.fenster,
text='US-Dollar', value='USD',
variable=self.waehrung)
gbp_button = Radiobutton(self.fenster,
text='Britisches Pfund', value='GBP',
variable=self.waehrung)
usd_button.pack()
gbp_button.pack()
us d _ but t on.s e lec t ( ) #5
463
15.15
Lösungen
#1: Das Dictionary enthält die Wechselkurse für US-Dollar und britisches Pfund (Stand:
Oktober 2009) und ist ein Klassenattribut.
#2: Kontrollvariable für Gleitkommazahlen. An sie wird das Entry-Widget gekoppelt.
#3: Kontrollvariablen für die mittels Radiobutton gewählte Währung und die Ausgabe des
Rechenergebnisses.
#4: Anonymes Überschrift-Label. Es wird erzeugt und sofort in das Anwendungsfenster
gepackt. Die beiden Radiobuttons sind nicht anonym, damit über die
select()-Methode
ein Radiobutton selektiert werden kann (Zeile
#5). Auf ihre Werte wird über Kontrollvaria-
blen zugegriffen.
#6: Die Ausgabe des Ergebnisses auf dem unteren Label erfolgt, indem der Kontrollvaria-
blen
self.ausgabe ein String zugewiesen wird.
Lösung 3
Skript:
Button(self.fenster, text='Rechnung',
command=self.rechnung).pack()
Label(self.fenster,font=('Arial', 12),
width=30, height=2,
textvariable=self.ausgabe).pack()
self.fenster.mainloop()
def rechnung(self):
euros = self.euros.get()
waehrung = self.waehrung.get()
ergebnis = str(euros * self.kurs[waehrung])
self.ausgabe.set(ergebnis+' ' + waehrung) #6
w = W a ehr u ngsr e c hne r ( )
# plastik.pyw
from tkinter import *
class Plastik:
def __init__(self):
self.fenster = Tk()
self.fenster.title('Kunststoff')
self.schwimmt, self.brennt = IntVar(), IntVar() #1
self.russt, self.duftet, self.tropft = IntVar(), IntVar(), IntVar()
self.ausgabe = StringVar()
Kapitel 15
Grafische Benutzungsoberflächen mit tkinter
464
Label(self.fenster, text='Dichte',width=24,
font=('Arial', 12), fg='blue').pack()
Radiobutton(self.fenster, text='schwimmt', value= 1,
variable=self.schwimmt).pack() #2
Radiobutton(self.fenster, text='schwimmt nicht',
value= 0, variable=self.schwimmt).pack()
Label(self.fenster, text='Brennbarkeit',width=24,
font=('Arial', 12),fg='blue').pack()
Radiobutton(self.fenster, text='brennt', value= 1,
variable=self.brennt).pack()
Radiobutton(self.fenster, text='brennt nicht',
value=0, variable=self.brennt).pack()
Label(self.fenster,
text='Verhalten beim Verbrennen',
width=24, font=('Arial', 12),
fg='blue').pack()
Checkbutton(self.fenster, text='ru\xdfende Flamme',
offvalue=0, onvalue=1,
variable=self.russt).pack() #3
Checkbutton(self.fenster, text='tropft',
offvalue=0, onvalue=1,
variable=self.tropft).pack()
Checkbutton(self.fenster, text='duftet nach Wachs',
offvalue=0, onvalue=1,
variable=self.duftet).pack()
Button(self.fenster, text='Auswertung',
command=self.auswertung).pack()
Label(self.fenster,font=('Arial', 12),
width=24, height=2,
bg='yellow',textvariable=self.ausgabe).pack()
self.fenster.mainloop()
def auswertung(self):
s, b = self.schwimmt.get(), self.brennt.get() #4
d, t = self.duftet.get(), self.tropft.get()
r = self.russt.get()
if s and b and d and t and not r:
self.ausgabe.set('Es ist Polyethylen (PE).')
elif not s and b and not d and not t and r:
self.ausgabe.set('Es ist Polystyrol(PS).')
465
15.15
Lösungen
Erläuterung:
#1: Für die Radiobuttons und Checkbuttons werden Kontrollvariablen für Integer-Werte ins-
tanziiert. Die Zahlen werden später als Wahrheitswerte interpretiert (
0 = False und
1 = True). Weil wir Kontrollvariablen verwenden, brauchen wir den Widgets (Radiobut-
tons) keine Namen zu geben, denn es müssen ihnen ja keine Botschaften gesendet werden.
#2: Die Radiobuttons zur Schwimmfähigkeit werden an eine Kontrollvariable (self.
schwimmt
) gekoppelt. Sie enthält entweder den Wert 0 oder 1, je nachdem, welcher Knopf
gedrückt ist.
#3: Für jeden Checkbutton gibt es eine eigene Kontrollvariable. Sie kann zwei unterschied-
liche Werte enthalten (in diesem Fall
0 oder 1), je nachdem, ob der Checkbutton gedckt
ist oder nicht. Der Checkbutton
self.c_russt ist z.B. mit der Kontrollvariablen
self.russt verknüpft. Wenn dieser Checkbutton gedrückt ist, hat die Kontrollvariable
automatisch den Wert
1 und sonst 0 (onvalue und offvalue).
#4: Damit die Bedingungen der nachfolgenden if- und elif-Anweisungen leichter formu-
liert werden können, werden lokale Variablen eingeführt.
elif not (s or b or d or r or t):
self.ausgabe.set('Es ist Polyvinylchlorid (PVC).')
e l s e :
self.ausgabe.set('Kunststoff unbekannt.')
p = Plastik()

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.