In callback feststellen, welcher Button gedrückt wurde

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Thundernail
User
Beiträge: 1
Registriert: Freitag 4. Januar 2008, 19:48

Dienstag 8. Januar 2008, 23:48

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?
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.
BlackJack

Mittwoch 9. Januar 2008, 00:14

Ü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)``.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 9. Januar 2008, 07:07

Thundernail hat geschrieben:Nur wie weiß ich in dem CallBack, welcher Button benutzt wurde?
Hallo Thundernail!

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