Hey Leute,
Ich habe eine wxPython Applikation. In dieser werden mehrere Werte (Staedte) aus einer Datenbank ausgelesen und untereinander dargestellt.
Ich will fuer jede Stadt die Moeglichkeit schaffen, noch eine Dialog zu oeffnen in den mehr Informationen aus der Datenbank angezeit werden...
Ich dachte mir das geht am besten mit einem Button neben jeder Stadt, doch ich will ja dass jeder Button die gleich Funktion aufruft, ihr jedoch den Namen der Stadt als Parameter mituebergibt...
Wie kann ich das machen??
so long,
Samy
Mehrere Buttons unterscheiden
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Samy!samy-delux hat geschrieben:doch ich will ja dass jeder Button die gleich Funktion aufruft, ihr jedoch den Namen der Stadt als Parameter mituebergibt...
Es gibt mehrere Möglichkeiten. Eine davon ist ``lambda``:
Code: Alles auswählen
button.Bind(wx.EVT_BUTTON, lambda event: self.my_eventhandler(event, "Name der Stadt"))
...
def my_eventhandler(self, event, town_name):
print "Name der Stadt:", town_name
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 44
- Registriert: Donnerstag 26. April 2007, 19:23
Das mit dem lambda haette schon fast geklappt. Das Problem ist jedoch die die Ausgabe wird in einer for-Schleife erstellt, so wie auch die Buttons. Es werden mehrere Zeilen untereinander ausgegeben, mit jeweils einem Button pro Zeile.
Wenn ich jetzt will, dass der Button die Zeile an die Funktion uebergibt in der er steht, klappt dies nicht, da die Zeilennummer ja hochgezaehlt wird und da der Button ja den Wert der Zeilenvariable erst dann aussliest, wenn er geklickt wird, liefert jeder Button z.B. '5" an die Funktion die ausgefuehrt werden soll.
Leider faellt mir im Moment nichts ein um dies zu umgehen...
Wenn ich jetzt will, dass der Button die Zeile an die Funktion uebergibt in der er steht, klappt dies nicht, da die Zeilennummer ja hochgezaehlt wird und da der Button ja den Wert der Zeilenvariable erst dann aussliest, wenn er geklickt wird, liefert jeder Button z.B. '5" an die Funktion die ausgefuehrt werden soll.
Leider faellt mir im Moment nichts ein um dies zu umgehen...
-
- User
- Beiträge: 44
- Registriert: Donnerstag 26. April 2007, 19:23
Ok, das Problem hat sich erledigt.
Konnte es selbst loesen, indem ich jedem Button eine hochgezaehlte Id gegeben habe, und diese dann ueber das uebergebene event wieder ermittele!
Mein Code, bereinigt von den Sachen die zum Rest des Programms gehoeren:
so long,
Samy
Konnte es selbst loesen, indem ich jedem Button eine hochgezaehlte Id gegeben habe, und diese dann ueber das uebergebene event wieder ermittele!
Mein Code, bereinigt von den Sachen die zum Rest des Programms gehoeren:
Code: Alles auswählen
def ShowResult(self):
num = 0
for connection in connections:
self.resultwidgets.append( wx.Button(self, num, 'Karte', (450, 100)) )
self.resultwidgets[-1].Bind(wx.EVT_BUTTON, self.ShowMap)
num += 1
def ShowMap(self, event):
button = event.GetEventObject()
conid = button.GetId()
Samy