Eigener Namensraum

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Montag 18. September 2006, 22:26

Hallo!

Habe eben viel zu Namensräumen gelesen, aber meine Frage blieb leider unbeantwortet :-(

Ich verwende wx.Python, und in diesem Zusammenhang möchte ich ein eigenes Modul schreiben, welches mir einfach viele Ids erstellt.

Beispiel:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
# File: MyIds.pyw
import wx
MY_ID_1 = wx.NewId()
MY_ID_2 = wx.NewId()
MY_ID_3 = wx.NewId()
Nun soll dieses Modul einfach immer von meinen anderen Modulen importiert werden, um die Ids direkt über MY_ID_1 etc. zu haben.

Zweck:
Ich habe ein Modul, welches mir ein Menü generiert. Die Menüpunkte sollen für mich leicht erkennbare Ids erhalten, welche ich in einem anderen Modul (u.a. Ereignis "wx.EVT_MENU") auswerten möchte.

Ich hoffe, dass ist nachvollziehbar :-)

Viele Grüße
JR
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Montag 18. September 2006, 23:52

Ich hoffe, dass ist nachvollziehbar Smile
Ich befürchte, ganz sicher bin ich nicht.
Meinst du sowas?

Code: Alles auswählen

from jrsmodul import *
print MY_ID_1
wenn ja, was daran wurde in deiner Lektüre nicht beantwortet?
Eine simple Lösung dafür wäre nämlich eine Datei namens jrsmodul.py (im pythonpath) mit dem von dir geposteten codeinhalt.[/code]
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Dienstag 19. September 2006, 00:03

Hey, der Tipp mit dem PYTHONPATH ist gut, danke!!
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 19. September 2006, 11:01

Hoi,

die Antwort ist zwar off-topic, aber irgendwie finde ich die Idee Code zu schreiben, um einen Haufen IDs zu generieren, etwas seltsam.

Shau mal hier, wie eine alternative Lösung aussehen kann: http://www.python-forum.de/topic-6891.html (Ich werde bald mal ein kleines Update dort reinpasten.) Ziel ist nicht etwa Eigenwerbung. Mich würde aber interessieren, weshalb die Idee einen Haufen IDs per Hand zu verwalten einfacher sein soll - lasse mich aber gerne eines Besseren belehren.

Gruß,
Christian
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Dienstag 19. September 2006, 11:34

Ich tippe mal darauf, dass das daran liegt, dass ich nicht genau weis, wofür genau diese IDs eingesetzt werden, aber den Gedanken, Konstanten irgendwie hübsch zu gruppieren, finde ich eigentlich recht ok.

statt

Code: Alles auswählen

PERMISSIONS_TEXT_MAY_UPDATE
finde ich

Code: Alles auswählen

import permissions.text
permissions.text.UPDATE
schon irgendwie hübscher. Aber vielleicht bin ich nur von Javas Typesafe Enums verdorben ;)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 19. September 2006, 12:38

Zur Infor vorweg: IDs in wxPython sind eindeutige Integer (eigentlich longs), die dazu dienen können Widgets (oder auch Events) anzusprechen.

M. a. W. statt der Zahlen werden hier eine Menge von "Scheinkonstanten" gehandhabt. Widgets aber geben ihre IDs preis, wenn man sie höflich fragt. Also sehe ich nicht die Notwendigkeit beim Generieren der Menubar eine Liste von IDs explizit zuzuweisen und zu verwalten. (Ist für mich auch keine Frage des Namensraumes: Überall wo das Widget bekannt ist, kann man auch die ID erfragen.)

Gruß,
Christian
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Mittwoch 20. September 2006, 17:28

Hallo CM!

Die Menüpunkte bzw. die MenuBar() mit den Menüs wird in einem Modul erstellt. Die zugewiesenen Ereignismethoden, welche von wx.EVT_MENU gerufen werden, gehören meiner Unterklasse des wx.MDIParentFrame in einem anderen Modul an. Um dort zu erkennen, welcher Menüpunkt (und zwar anhand des Menüpunktnamens) die Methode gerufen wird, benötige ich doch die Id. Es gibt zwar event.GetEventObject(), doch das gibt mir nur den Handle. Nun hat das Objekt wx.MenuItem() leider keinen Initialisierungsparameter name. Da mein Programm quasi i18n implementiert, sind die Menüpunkttexte wx.MenuItem.GetText() auch nicht hilfreich, da die Labels der Menüpunkte dynamisch sind (je nachdem, welche Sprache der Anwender gerade eingestellt hat).

Daher ist

Code: Alles auswählen

if event.GetEventObject().GetId() == MEINE_ID:
  bla bla
else:
  pass
hilfreich.

Grüße
JR
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Donnerstag 21. September 2006, 14:18

Ah, Danke.

So ganz klar ist mir das immer noch nicht, aber vielleicht magst Du das mal als (vereinfachtes) Snippet (oder so) posten? Dafür klingt es allemal interessant genug.

Gruß,
Christian
Antworten