s n h m r u
i

Eine Leinwand für Grafiken

Zielsetzung

Wenn bei einem Spiel kein Gewinn erzielt wird, dann soll dies durch einen Pfeil nach unten verdeutlicht werden. Andernfalls soll ein Pfeil nach oben gezeichnet werden.

Anwendungsfenster

Zeichenfläche als GUI-Objekte

Der folgende Quelltextauszug zeigt, wie man einfache Grafiken erzeugen kann.

# -*- coding: iso-8859-1 -*-
from wx import *
# Ereignisverarbeitung

def on_paint(event):
dc = PaintDC(panel)
dc.Clear()
dc.SetPen(Pen("BLACK", 1))
dc.DrawLine(20, 80, 20, 40)
dc.DrawLine(20, 40, 40, 20)
dc.DrawLine(40, 20, 60, 40)
dc.DrawLine(60, 40, 20, 40)
dc.DrawLine(20, 40, 60, 80)
dc.DrawLine(60, 80, 60, 40)
dc.DrawLine(60, 40, 20, 80)
dc.DrawLine(20, 80, 60, 80)

Erzeugung des Fensters

app = App()
frame = Frame(parent=None)
frame.SetTitle("Test")
frame.SetSize((128, 145))
frame.SetBackgroundColour("white")
frame.Show()

Rahmen

panel = Panel(parent=frame)
panel.SetSize((110, 100))
panel.SetPosition((5, 5))
panel.SetBackgroundColour("#FFCFC9")
panel.Bind(wx.EVT_PAINT, on_paint)

Aktivierung des Fensters

app.MainLoop()

Beachte, dass das Panel-Objekt panel hier als Zeichenfläche benutzt wird. Jedesmal, wenn die Benutzeroberfläche neu gezeichnet wird, wird auch die Ereignisverarbeitungsmethode on_paint ausgeführt. Bei der Ausführung wird ein PaintDC-Objekt erzeugt, das für das Zeichnen der Figuren (im Beispiel oben sind es Linien) zuständig ist.

Test

Der folgende Quelltextauszug zeigt, wie man einfache Grafik dynamisch erzeugen kann.

# -*- coding: iso-8859-1 -*-
from wx import *
from random import randint
# Ereignisverarbeitung

def Button_Zeichnen_Click(event):

Verarbeitung der Daten

zahl = randint(0, 1)
# Anzeige der Daten
stZahl.SetLabel(str(zahl))
frame.Refresh()   

def on_paint(event):
dc = PaintDC(panelKonto)
zahl = int(stZahl.GetLabel())
if zahl > 0:
dc.SetPen(Pen("#FFCFC9"))
dc.DrawLine(20, 40, 20, 60)
dc.DrawLine(20, 60, 16, 56)
dc.DrawLine(20, 60, 24, 56)
dc.SetPen(Pen("black"))
dc.DrawLine(90, 60, 90, 40)
dc.DrawLine(90, 40, 86, 44)
dc.DrawLine(90, 40, 94, 44)
else:
dc.SetPen(Pen("black"))
dc.DrawLine(20, 40, 20, 60)
dc.DrawLine(20, 60, 16, 56)
dc.DrawLine(20, 60, 24, 56)
dc.SetPen(Pen("#FFCFC9"))
dc.DrawLine(90, 60, 90, 40)
dc.DrawLine(90, 40, 86, 44)
dc.DrawLine(90, 40, 94, 44)

Erzeugung des Fensters

app = App()
frame = Frame(parent=None)
frame.SetTitle("Test")
frame.SetSize((128, 145))
frame.SetBackgroundColour("white")
frame.Show()

Rahmen Konto

panelKonto = Panel(parent=frame)
panelKonto.SetSize((110, 100))
panelKonto.SetPosition((5, 5))
panelKonto.SetBackgroundColour("#FFCFC9")
panelKonto.Bind(wx.EVT_PAINT, on_paint)

Label mit Überschrift

stUeberschriftZeichnen = StaticText(parent=panelKonto, style=ALIGN_CENTRE|ST_NO_AUTORESIZE)
stUeberschriftZeichnen.SetLabel("Zeichnen")
stUeberschriftZeichnen.SetSize((100, -1))
stUeberschriftZeichnen.SetPosition((5, 5))
stUeberschriftZeichnen.SetBackgroundColour("white")

Label Zahl

stZahl = StaticText(parent=panelKonto, style=ALIGN_CENTRE|ST_NO_AUTORESIZE)
stZahl.SetLabel("0")
stZahl.SetFont(Font(14, NORMAL, NORMAL, NORMAL))
stZahl.SetSize((30, 25))
stZahl.SetPosition((40, 35))
stZahl.SetBackgroundColour("white")

Button zum Zeichnen

bZeichnen = Button(parent=panelKonto)
bZeichnen.SetLabel("Zeichnen")
bZeichnen.SetPosition((5, 75))
bZeichnen.SetSize((100, 20))
bZeichnen.Bind(EVT_BUTTON, Button_Zeichnen_Click)

Aktivierung des Fensters

app.MainLoop()

Wenn man die Schaltfläche anklickt, dann wird - je nach ermittelter Zufallszahl - ein Pfeil nach oben oder nach unten gezeichnet.

Test

Beachte, dass mit frame.Refresh() die Benutzeroberfläche nach jedem Anklicken der Schaltfläche neu gezeichnet wird.

Aufgabe 1

Erweitere das Programm zum chuck-a-luck-Spiel so, dass mit Hilfe eines Pfeiles angezeigt wird, ob ein Spiel gewonnen oder verloren wurde.

Anwendungsfenster

Suche

v
9.1.5.9 Eine Leinwand für Grafiken
Kopieren durch Anklicken

Rückmeldung geben