wx IDs in __init__.py für das gesamte Paket definieren

Plattformunabhängige GUIs mit wxWidgets.
Antworten
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hi,
ich hatte gerade eine Überlegung. In vielen Fällen kommt man ja um die Erzeugung von IDs für wxPython nicht herum. Ich überlege gerade ob man nicht einfach ein Paket namens GUI erstellt in dem sämtliche Module abgelegt werden die was mit der grafischen Oberfläche zu tun haben und in der __init__.py definiert man die IDs für das gesamte Paket.

Ist das sinnvoll oder spricht was dagegen?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

burli hat geschrieben:In vielen Fällen kommt man ja um die Erzeugung von IDs für wxPython nicht herum.
Hallo burli!

Dann machst du etwas falsch. Es gibt so gut wie keine Fälle, in denen noch eine ID nötig wäre. Mir fällt im Moment nur das Erzeugen von Tastaturkürzeln mit ``wx.AcceleratorTable`` ein. Und den Buttons "Abbrechen" und "OK" eines Dialogfensters, sollte man die IDs: wx.ID_CANCEL und wx.ID_OK zuweisen.

Das war's, mehr fällt mir nicht ein. Sonst brauche ich nirgends irgendeine ID und ich programmiere verdammt viel mit wxPython (täglich).

Schaue dir doch mal diese Beispiele von mir an:
- Standardfenster mit Menüs: http://www.python-forum.de/topic-5722.html
- Eigene Events verwenden: http://www.python-forum.de/topic-14587.html

Was machst du anders, dass du so viele IDs brauchst?

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Vielleicht bin ich noch nicht weit genug in die wx Welt vorgedrungen oder ich hab den Sinn der IDs immer noch nicht verstanden.

Mal ein Beispiel: ich haben einen Editor mit den Funktionen Copy, Paste, Undo usw und ich möchte die Funktionen im Menu, in der Toolbar, im Kontext Menu des Editfeldes und als Tastenkürzel verwenden. Muss ich da nicht immer die gleiche ID verwenden?

Zb AUI_DockingWindowMgr aus der wxPython Demo fängt mit einigen wx.NewId() Zuweisungen an
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

burli hat geschrieben:Mal ein Beispiel: ich haben einen Editor mit den Funktionen Copy, Paste, Undo usw und ich möchte die Funktionen im Menu, in der Toolbar, im Kontext Menu des Editfeldes und als Tastenkürzel verwenden. Muss ich da nicht immer die gleiche ID verwenden?
Hallo burli!

Es zwingt dich niemand dazu die IDs zu verwenden. Das kannst du genau so gut auch ohne IDs erledigen.

Du hast eine Funktion die etwas erledigt. Und mit ``.Bind`` kannst du diese eine Funktion allen Elementen als Event-Handler zuweisen. Wie man in den Beispielen sieht, funktioniert das auch ohne IDs wunderbar.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Ok, aber warum definieren die in der genannten Demo fast 30 IDs am Dateianfang? Ist das nur eine überflüssige Altlast die einfach nicht überarbeitet wurde?

Ein Beispiel:

Code: Alles auswählen

ID_SizeReportContent = wx.NewId()
view_menu.Append(ID_SizeReportContent, "Use a Size Reporter for the Content Pane")
self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_SizeReportContent)
self._mgr.GetPane("sizereport_content").Show(event.GetId() == ID_SizeReportContent)
Das sind jetzt nur die Zeilen die sich auf SizeReportConten beziehen
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

burli hat geschrieben:Ok, aber warum definieren die in der genannten Demo fast 30 IDs am Dateianfang? Ist das nur eine überflüssige Altlast die einfach nicht überarbeitet wurde?
Hallo burli!

Das kann ich dir nicht sagen. Vielleicht ist es für den speziellen Anwendungsfall keine schlechte Idee, die IDs zu verwenden.

Um auf deine ursprüngliche Frage zurück zu kommen. Ich erstelle mir in meinen Projekten oft im Projekt-Hauptordner ein Modul mit dem Namen "constants.py". In größeren Projekten gibt es bei mir einen "lib"-Ordner. In diesem sind dann die für das Projekt globalen Module drinnen. Aber das hält, glaube ich, jeder so wie er es gerne möchte.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten