Umfrage

Fragen zu Tkinter.
Antworten
No17
User
Beiträge: 16
Registriert: Mittwoch 24. Oktober 2018, 14:40

Hallo Leute,

ich möchte gerne mit Tkinter eine Umfrage gestalten. Es soll ein Startseite geben, auf der ich mit LAbel Willkommenstext anzeige. Und einen Start Button. Wird dieser geklickt soll es weiter zur ersten Umfrageseite springen. Da gibt es eine Frage und mehere Antwortmöglichkeiten, aber nur eine kann man auswählen. Bsp Welche Klasse bist du? 10. K 11. K 12.K. Man kann nur eins auswählen. Dannach geht es weiter zu Seite 2 und so weiter und so weiter. Am ende kommt eine Schlussseite mit dem Button "Umfrage absenden" . Wird darauf geklickt sollen die gesammelten Daten aus den Abfragen strukturiert in eine txt. Datei gespeichert werden. Am besten noch mit Zeit Stempel. Und jetzt soll alles wieder auf Anfang sprich Startseite. Und eine neue Person soll die Umfrage machen können.( die txt soll aber nicht überschrieben werden sodern in die nächste Zeile | und mit strukturiert meine wie eine Art tabelle also dass immer die Klasse dann das Ergebnis aus sSeite 2 … dasteht)

In einer while schleife geht soetwas doch bestimmt nicht so einfach?

Worüber ich mich freuen würde wäre ein Tipp/Beschreibung ggf. mit Programmteilen oder Ansätzen wie ich das am Besten realisieren kann.

LG


(falls wichtig: ich nutze Visual Studie 2017)
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

GUI-Programmierung ist Ereignis-basiert. Da gibt es keine while-Schleife, dann friert dir die GUI ein.

Muss das tkinter sein? Kannst du nicht eine Webseite bauen? Die sieht schoener aus, und ist einfacher zu verstehen fuer dich zum programmieren.

Wenn es tkinter sein muss, dann hilft

https://docs.python.org/3/library/tkint ... l#notebook

Damit kannst du einzelne Tabs mit deinen spezifischen Fragen machen, und weiterschalten, und wieder zum Anfang.

Das strukturierte speichern kannst du zB mit dem json-Modul machen. Oder mit dem csv-Modul, wenn es denn zeilenbasiert sein soll.
No17
User
Beiträge: 16
Registriert: Mittwoch 24. Oktober 2018, 14:40

Das mit der Website klingt auch nicht schlecht. Aber eine Frage bevor ich mich dazu informiere. Benötigt man dann Internetanschluss oder ist das auf dem PC und nur im Browser?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Noe, Internet brauchst du nicht. Du kannst ja auch eine lokalen Webserver mit Django oder was auch immer machen. Da gibt es dann sogar schon fertige Pakete:

https://djangopackages.org/grids/g/surv ... tionnaire/

gearbeitet habe ich mit denen nicht, aber das ist an sich ja ein geloestes Problem...
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@No17: ``while``-Schleife geht schon deshalb nicht, weil GUI-Programmierung nicht so linear funktioniert, sondern ereignisorientiert. Du schreibst Code der die GUI erstellt und registrierst Rückruffunktionen/-methoden für bestimmte Ereignisse, beispielsweise das der Benutzer eine Schaltfläche gedrückt hat, und dann läuft die Hauptschleife von Tk(inter). Wenn der Benutzer dann die Schaltfläche drückt, wird Deine Ereignisbehandlung aufgerufen, die *kurz* etwas machen kann, beispielsweise die nächste Seite anzeigen wenn es die 'Weiter'-Schaltfläche war, und muss dann die Kontrolle wieder an die GUI-Hauptschleife zurückgeben. Sonst friert die GUI ein.

Da man sich über Aufrufe hinweg Zustand merken muss, also beispielsweise welches gerade die aktuell angezeigte Seite ist, kommt man um objektorientierte Programmierung (OOP) nicht wirklich herum. Es könnte einfacher sein das zu lernen *bevor* man dann noch die ereignisorientierte Programmierung mit GUIs dazu nimmt.

Für die Umsetzung würde ich versuchen für die Fragen (und möglichen Antworten) eine Datenstruktur zu entwerfen, so das man Code schreiben kann, der diese Datenstruktur in eine GUI überführt. Wenn man sich dabei auf die Grunddatentypen beschränkt, bzw. was beispielsweise als JSON, YAML, oder TOML kodiert werden kann, lässt sich die Umfrage leicht anpassen ohne das man den Code ändern muss.

Bei der Ergebnisdatei würde ich auch ein bekanntes Format nehmen. Eventuell reicht da ja schon CSV. Da gibt es ein Modul in der Standardbibliothek. Eine CSV-Datei lässt sich leicht um Datensätze am Ende erweitern.

Die Seiten lassen sich über `Frame`\s realisieren die alle in der selben `grid()`-Zelle angeordnet werden und wo man die jeweils aktuelle Seite nach vorne holt (`lift()`-Methode).
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
No17
User
Beiträge: 16
Registriert: Mittwoch 24. Oktober 2018, 14:40

Ok @_balckjack_ ich glaube so halbwegs zu verstehen wie du das meinst. Allerdings verstehe ich jetzt nicht wie das mit diesem überführen in die GUI gemeint ist. Gibt es dann einen Befehl der alles "anzeigt" oder wie muss ich das verstehen?

Und an euch beide: Nach was muss ich konkret googln um ein tutorial etc. zu finden das ich mir erstmal einen groben Überblick verschaffen kann?
LG
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@No17: Mit überführen war gemeint, das Du Code schreibst der die Datenstruktur mit der Umfrage nimmt, und daraus die GUI-Komponenten erstellt.

Einen groben Überblick über *was* möchtest Du denn haben? Über Python? Da gibt es ein Tutorial in der Python-Dokumentation. In der Referenzdokumentation zu den Modulen finden sich dann auch manchmal noch externe Links. Zum Beispiel beim `tkinter`-Modul.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten