de:beispiele
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
de:beispiele [2022/02/01 09:59] – [Verkettete Liste] roehner | de:beispiele [2022/08/25 21:33] (aktuell) – [EAN-Prüfung] roehner | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
===== Beispiele ===== | ===== Beispiele ===== | ||
==== EAN-Prüfung ==== | ==== EAN-Prüfung ==== | ||
+ | === Tkinter/TTK === | ||
- | Die EAN-Prüfung ist ein Beispiel für eine einfache GUI-Anwendung. Sie hat eine Entry-Komponente | + | Die EAN-Prüfung ist ein Beispiel für eine einfache GUI-Anwendung. Sie hat ein Entry-Widget |
{{de: | {{de: | ||
Zeile 11: | Zeile 12: | ||
def bPruefen_Command(self): | def bPruefen_Command(self): | ||
# Eingabe | # Eingabe | ||
- | EAN = self.EANTV.get() | + | EAN = self.eEANCV.get() |
# | # | ||
if not EAN.isdigit(): | if not EAN.isdigit(): | ||
- | self.ausgeben(' | + | self.ausgeben(' |
if len(EAN) == 13: | if len(EAN) == 13: | ||
self.ausgeben(' | self.ausgeben(' | ||
Zeile 42: | Zeile 43: | ||
</ | </ | ||
- | Gemäß dem EVA-Prinzip wird zunächst die Eingabe aus der Entry-Komponente | + | Gemäß dem EVA-Prinzip wird zunächst die Eingabe aus dem Entry-Widget |
<code python> | <code python> | ||
- | EAN = self.EANTV.get() | + | EAN = self.eEANCV.get() |
</ | </ | ||
- | wird also die in die Entry-Komponente | + | wird also die in das Entry-Widget |
Im Verarbeitungsteil wird geprüft, ob 13 Ziffern eingegeben wurden und dann die Prüfziffernberechnung durchgeführt. | Im Verarbeitungsteil wird geprüft, ob 13 Ziffern eingegeben wurden und dann die Prüfziffernberechnung durchgeführt. | ||
- | Die Ausgaben erfolgen in die Text-Komponente | + | Die Ausgaben erfolgen in das Text-Widget |
<code python> | <code python> | ||
Zeile 58: | Zeile 59: | ||
</ | </ | ||
- | Damit wird in die Text-Komponente | + | Damit wird in das Text-Widget |
**Download: | **Download: | ||
*[[https:// | *[[https:// | ||
+ | |||
+ | === Qt Variante der EAN-Prüfung === | ||
+ | In Qt haben wir ein LineEdit-Widget für die Eingabe und ein PlainTextWidget für die Ausgabe. Um die EAN zu lesen, verwenden wir die Methode //text()// des LineEdit-Widgets. | ||
+ | |||
+ | <code python> | ||
+ | EAN = self.leEAN.text() | ||
+ | </ | ||
+ | |||
+ | Die Ausgabe ist in Qt einfacher als in Tkinter/ | ||
+ | |||
+ | <code python> | ||
+ | def output(self, | ||
+ | self.Output.appendPlainText(line) | ||
+ | </ | ||
+ | | ||
+ | **Download**: | ||
+ | *[[https:// | ||
==== Auto ==== | ==== Auto ==== | ||
Zeile 84: | Zeile 102: | ||
</ | </ | ||
- | Beim Tanken wird die in der Entry-Komponente | + | === Tkinter/TTK === |
+ | |||
+ | Beim Tanken wird die in das Entry-Widget | ||
<code python> | <code python> | ||
def bTanken_Command(self): | def bTanken_Command(self): | ||
# Eingabe über die GUI | # Eingabe über die GUI | ||
- | Menge = float(self.eTankenTV.get()) | + | Menge = float(self.eMengeCV.get()) |
# Verarbeitung | # Verarbeitung | ||
self.auto1.tanken(Menge) | self.auto1.tanken(Menge) | ||
Zeile 96: | Zeile 116: | ||
</ | </ | ||
- | Dann wird gemäß dem EVA-Prinzip die eingegebene Menge in der Methode tanken() verarbeitet. | + | Dann wird gemäß dem EVA-Prinzip die eingegebene Menge in der Methode |
- | Abschließend erfolgt die Ausgabe des Ergbnisses | + | Abschließend erfolgt die Ausgabe des Ergebnisses |
<code python> | <code python> | ||
def anzeigen(self): | def anzeigen(self): | ||
- | self.eTankinhaltTV.set(self.auto1.get_Tankinhalt()) | + | self.eKennzeichenCV.set(self.auto1.get_Kennzeichen()) |
- | self.eKilometerstandTV.set(self.auto1.get_Kilometerstand()) | + | self.eTankinhaltCV.set(self.auto1.get_Tankinhalt()) |
+ | self.eKilometerstandCV.set(self.auto1.get_Kilometerstand()) | ||
self.lAuto.place(x = self.auto1.get_Kilometerstand(), | self.lAuto.place(x = self.auto1.get_Kilometerstand(), | ||
</ | </ | ||
- | Der Label-Komponente | + | Dem Label-Widget |
**Download** | **Download** | ||
*[[https:// | *[[https:// | ||
+ | === Qt === | ||
+ | |||
+ | Beim Tanken wird die eingegebene Menge über die text()-Methode des LineEdit-Widgets eingelesen und mittels //float// in den benötigten Datentyp konvertiert. | ||
+ | |||
+ | <code python> | ||
+ | def bTanken_clicked(self, | ||
+ | # Eingabe über die GUI | ||
+ | Menge = float(self.leMenge.text()) | ||
+ | # Verarbeitung | ||
+ | self.auto1.tanken(Menge) | ||
+ | # Ausgabe | ||
+ | self.anzeigen() | ||
+ | </ | ||
+ | |||
+ | Dann wird gemäß dem EVA-Prinzip die eingegebene Menge in der Methode // | ||
+ | |||
+ | Abschließend erfolgt die Ausgabe des Ergebnisses in einer eigenen Methode // | ||
+ | |||
+ | <code python> | ||
+ | self.leKennzeichen.setText(self.auto1.get_Kennzeichen()) | ||
+ | self.leTankinhalt.setText(str(self.auto1.get_Tankinhalt())) | ||
+ | self.leKilometerstand.setText(str(self.auto1.get_Kilometerstand())) | ||
+ | self.lAuto.move(self.auto1.get_Kilometerstand(), | ||
+ | </ | ||
+ | |||
+ | Dem Label-Widget //lAuto// wurde im Objektinspektor über das Attribut //Pixmap// ein Auto-Bild zugewiesen. Mit der move()-Methode wird die x-Position des Autos auf den Kilometerstand gesetzt. | ||
+ | |||
+ | |||
+ | **Download** | ||
+ | *[[https:// | ||
==== Verkettete Liste ==== | ==== Verkettete Liste ==== | ||
- | Die Programmierung dynamische Datenstrukturen stellt eine erhebliche Herausforderung dar, denn man muss das Konzept der Verkettung mittels Verweisen verstehen und komplexe Operationen mit Verweisen | + | Die Programmierung dynamische Datenstrukturen stellt eine erhebliche Herausforderung dar, denn man muss das Konzept der Verkettung mittels Verweisen verstehen und komplexe Operationen mit Verweisen |
In diesem Beispiel betrachten wir eine einfach verkettete lineare Liste. Die Liste selbst wird als Klasse // | In diesem Beispiel betrachten wir eine einfach verkettete lineare Liste. Die Liste selbst wird als Klasse // | ||
Zeile 130: | Zeile 181: | ||
- Die Liste ist leer. | - Die Liste ist leer. | ||
- Es soll am Anfang eingefügt werden. | - Es soll am Anfang eingefügt werden. | ||
- | - Es soll am Ende eingefügt | + | - Es soll am Ende eingefügt |
- Es soll zwischen zwei Knoten eingefügt werden. | - Es soll zwischen zwei Knoten eingefügt werden. | ||
Zeile 192: | Zeile 243: | ||
if Cursor is not None: | if Cursor is not None: | ||
vorheriger_Knoten.Nächster = Cursor.Nächster | vorheriger_Knoten.Nächster = Cursor.Nächster | ||
- | else: | ||
- | raise Exception(" | ||
</ | </ | ||
- | Durch interaktives Testen im UML-Fenster kann man die Funktionsfähigkeit der implementierten Methoden sehr gut prüfen, denn das Ergebnis wird unmittelbar im Objektdiagramm visualisiert. Man erkennt sofort, ob eine Methode wie gedacht funktioniert hat. | + | Durch interaktives Testen im UML-Fenster kann man die Funktionsfähigkeit der implementierten Methoden sehr gut prüfen, denn das Ergebnis wird unmittelbar im Objektdiagramm visualisiert. Man erkennt sofort, ob eine Methode wie gedacht funktioniert hat. Im Bild wurde zum Testen der // |
{{de: | {{de: | ||
+ | |||
+ | **Wichtiger Hinweis** | ||
+ | |||
+ | Im UML-Fenster werden zur Identifizierung der Objekte deren Adressen benutzt. Im Beispiel also die Adresse 0x03350E98 für das Objekt knoten1. | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | >>> | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | Implementieren Sie daher keine %%__repr__%%-Funktion für ihre Klassen, weil diese Adressen dann nicht mehr zur Verfügung stehen. | ||
**Download**: | **Download**: |
de/beispiele.txt · Zuletzt geändert: 2022/08/25 21:33 von roehner