Moin moin,
Ich habe eine Reihe von Buttons, die jeweils für eine ID steht. Nun benötige ich diesen ID wenn ein Button gedrückt wird.
Der mir bekannte Weg wäre, jeden Button mit einer CallBack-Funktion zu verknüpfen und in der CallBack-Funktion die ID zuzuweisen.
Das ist aber nicht gerade schön, 20 Funktionen mit 'gleichem' Inhalt zu schreiben
Es ist möglich mit mehreren Buttons den gleichen CallBack aufzurufen. Nur wie weiß ich in dem CallBack, welcher Button benutzt wurde?
In callback feststellen, welcher Button gedrückt wurde
-
- User
- Beiträge: 1
- Registriert: Freitag 4. Januar 2008, 19:48
You need only two tools. WD-40 and duct tape.
If it doesn't move and it should, use WD-40. If it moves and shouldn't, use the tape.
If it doesn't move and it should, use WD-40. If it moves and shouldn't, use the tape.
Üblicherweise nimmt man dafür eine Lambda-Funktion, die an den Callback gebunden wird und die ID "enthält". Also in etwa: ``lambda: self.CallBack(42)``.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Thundernail!Thundernail hat geschrieben:Nur wie weiß ich in dem CallBack, welcher Button benutzt wurde?
Willkommen im Python-Forum!
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-15")
class MyFrame(wx.Frame):
def __init__(
self, parent = None, title = "Example", size = wx.Size(550, 420)
):
wx.Frame.__init__(self, parent, -1, title, size = size)
panel = wx.Panel(self)
vbox_main = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox_main)
button1 = wx.Button(panel, label = "Button 1", name = "button1")
vbox_main.Add(button1)
button1.Bind(wx.EVT_BUTTON, self.on_button)
button2 = wx.Button(panel, label = "Button 2", name = "button2")
vbox_main.Add(button2)
button2.Bind(wx.EVT_BUTTON, self.on_button)
def on_button(self, event):
print "Attribute des Events:", dir(event)
print
clicked_button = event.GetEventObject()
print "Referenz zum Button:", clicked_button
print "ID des Buttons:", event.GetId()
print "Name des Buttons:", clicked_button.GetName()
def main():
"""Testing"""
app = wx.PySimpleApp()
f = MyFrame()
f.Center()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
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.