ocempgui DialogWindow Problem
Verfasst: Donnerstag 14. April 2011, 14:47
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.
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.