ocempgui DialogWindow Problem

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ich bau für mein Snake-Spiel zur Zeit ein Menü mit "ocempgui".

ocemp sah auch auf den ersten Blick sehr gut aus und ist auch recht gut Strukturiert, im Gegensatz zu dem was es sonst so für GUIs für Pygame gibt. Es erinnert stark an das .NET-Konzept von Microsoft, was ich an sich nicht besonders brickelnd finde, aber nicht weiter schlimm ist. Jedenfalls gibt es im eigentlichen Sinn keine "Parent"-Objekte, sondern die einzelnen Widgets werden immer per "add_child", "set_child", ... Methoden an das übergeordnete Widget gepackt. Dort wird das Parent zwar verlinkt, ist aber von außen nicht ohne weiteres zugänglich.
Ich habe einen Hauptmenü, welches ein "Window"-Widget ist. Darauf liegen Button die einzelne Untermenüs* öffnen sollen. Diese erzeugen "DialogWindow" mit den jeweiligen Optionen, das funktioniert auch schon ganz gut. Der Unterschied vom "DialogWindow" zu "Window" ist das bei einem Dialog das theoretische Parent Widget gesperrt wird. In meinem Fall ist das direkt der Renderer, also das Hauptprogramm. Struktur sollte also "Renderer --> Hauptmenü --> Untermenü" sein. Geht aber nicht, da "Window"s nur ein "Child" zulassen, welches im Prizip einen beweglichen Rahmen bekommt. So kann ich also das Untermenü nur direkt auf den Renderer packen.

Mein Problem stellt sich nun bei folgender Konstellation. Wenn ich jetzt noch von einem Untermenü eine MessageBox, also ein weiteres "DialogWindow" erzeugen möchte, kann ich dies auch nur wieder auf den Renderer packen. Schließe ich dieses jetzt, wird die Referenz auf das Untermenü verworfen und die Blockade damit aufgehoben.
Im Endeffekt wird mein Untermenü damit von einem DialogWindow zu einem Window und das Hauptmenü lässt sich wieder anklicken. Wäre auch hier noch kein Problem, nur wenn zwei Menüs übereinander sind, kann es genauso sein das das untere angeklickt wird. Was für die Bedienung des Menüs nicht sehr schön ist.

Kennt sich jemand mit ocemp aus?

* Wer eine Visuelle Ansicht braucht, auf GitHub ist schon das Menü drin wie es ungefähr aussehen soll.

Edit: Habe jetzt auch das Menü hochgeladen mit dem ich gerade das Problem habe. Um es selbst zu verursachen einfach main.py starten. Dann auf Einstellungen klicken, dann auf Übernehmen ohne irgendwas einzutragen und dann auf Abbrechen. Jetzt sollte das Problem sehr deutlich sein, denn jeder Klick wird nur auf dem Hauptmenü ausgeführt, sobald es darunter liegt.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Das Problem ist zu speziell, oder ?
Ich würde mich ja an den Autoren wenden, nur der macht seit 3 Jahren schon nichts mehr daran. :( und eine Comunity gibt es so weit ich weiß auch nicht dafür.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Hab es 8).

Ist eigentlich recht einfach, nur bis man durch die Strucktur durchblickt dauert es eine Weile.
Jeder Dialog basiert nach 2-3 Superklassen irgendwann auf "Bin" dieses besitzt einen "event_grabber" auf dem "manager"-Attribute des "BaseObject"s. Der Manager ist für das verwalten der Events von den Widgets zuständig und wird von jedem Widget weitergereicht, effektiv sollte es nur einen Manager für Widgets existieren. Das "event_grabber"-Attribute erwartet ein Widget und sperrt das Eventhandling jedes Widgets auf dem Manager und blockiert damit alle anderen Widgets bis das "event_grabber" None ist.

Also musste ich meiner MessageBox einfach das zuvor gesperrte Widget mit übergeben und in der "destroy"-Methode diesem wieder dem "event_grabber" zuorden.

Danke für die tolle Unterstützung :D
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Nur weil es mir bei dir schon so häufig aufgefallen ist: Struktur wird ohne c geschrieben ;-)
Das Leben ist wie ein Tennisball.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ich weiß ich korrigiere das auch schon häufig, es passiert mir nur immer wieder :cry:
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten