Verständnisfragen zu Device Context und Bildern

Plattformunabhängige GUIs mit wxWidgets.
Antworten
DragothiC
User
Beiträge: 2
Registriert: Mittwoch 24. Dezember 2008, 15:03

Mittwoch 24. Dezember 2008, 15:11

Hallo,
ich möchte eine kleine Anwendung schreiben, bei der auf einem Device Context ein Busbelegungsplan dargestellt wird. Es gibt 32 Sitzplätze in 8 Reihen a 2x2 Sitzplätze. Diese möchte ich durch einfach Rechtecke zeichnen.
Beim einfachen Klick auf einen Sitzplatz soll der ausgewählte Platz durch eine Farbänderung gekennzeichnet werde. Bei einem Doppelklick soll ein modaler Dialog erscheinen um einen Namen einzutragen, welcher den Sitzplatz dann reserviert (der Name soll dann auch auf dem Platz grafisch erscheinen).
Ausserdem sollen eingetragene Personen durch Drag and Drop auf freie Sitzplätze verschoben werden können bzw. mit anderen Personen getauscht werden können.
Die eingetragenen Daten müssen mittels cPickle abgespeichert werden können.

Hierzu habe ich einige Verständnisfragen:
Kann ich einmal gemalte "Objekte" im Nachhinein überhaupt noch verändern? Kann ich also die Plätze zeichnen und nachher noch herausbekommen, welchen Sitzplatz (= weches Rechteck) ich angeklickt habe?
Oder male ich nur den Grundplan und male dann für die Personen andere Controls wie Panels auf das Bild? Kann ich diese dann noch mit cPickle abspeichern oder geht das nur mit Bildern?

Vielen Dank im Voraus und ein frohes Fest!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 25. Dezember 2008, 20:57

Hallo DragothiC!

Das ist keine einfache Aufgabe -- aber machbar.

Zuerst solltest du wissen, dass ein Bild kein Widget mit eigenen Events ist. Und einzelne Bildauschnitte lassen sich nicht per Drag & Drop verschieben.
Was du aber machen kannst, ist ein Hintergrundbild in ein Panel zu zeichnen und in dem Panel kannst du z.B. wx.Window-Objekte oder Panels für die Personen erstellen. Diese kannst du dann hin und her ziehen.

Es gibt auch andere Möglichkeiten, deine Aufgabenstellung zu lösen. Schau' dir mal die wxPython-Demo an. Dort sind ein paar interessante Ansätze zu finden. Suche in der wxPython-Demo nach "OGL" oder "PseudoDC".
Und das hier könnte dich vielleicht auch noch interessieren: http://www.python-forum.de/topic-10260.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
DragothiC
User
Beiträge: 2
Registriert: Mittwoch 24. Dezember 2008, 15:03

Samstag 27. Dezember 2008, 20:06

Vielen Dank, ich habs so gemacht wie du vorgeschlagen hast und es hat auch funktioniert.
Antworten