[Python-de] wxPython event handler

Maik Derstappen info at profi-internetseiten.de
So Apr 6 17:30:17 UTC 2008


Maik Derstappen schrieb:
> Hallo zusammen,
>
> ich beschäftige mich gerade mal ein wenig mit wxpython.
> Dabei verstehe ich die Vorgehensweise beim eventhandling mit buttons 
> nicht ganz.
>
> Ich habe in einem Frame 2 Buttons die vom Typ ADD sind.
> Beiden habe ich über wxglade in der eventtabelle eine eigene methode 
> zugewiesen.
>
> im python code sieht das dann so aus:
>
>          wx.Frame.__init__(self, *args, **kwds)
>         self.button_1 = wx.Button(self, wx.ID_ADD, "")
>         self.button_2 = wx.Button(self, wx.ID_ADD, "")
>
>         self.Bind(wx.EVT_BUTTON, self.OnAddProject, self.button_1)
>         self.Bind(wx.EVT_BUTTON, self.OnAddTask, self.button_2)
>
>     def OnAddProject(self, event): # wxGlade: MyFrame.<event_handler>
>         print "Event handler `OnAddProject' not implemented!"
>         event.Skip()
>
>     def OnAddTask(self, event): # wxGlade: MyFrame.<event_handler>
>         print "Event handler `OnAddTask' not implemented!"
>         event.Skip()
>
>
> Das ist der generierte code:
> Ich habe die methode natürlich angepasst und sie enthalten auch kein 
> event.skip() mehr.
> Dennoch wird bei einem Klick auf button1 zu erst OnAddTask() ausgeführt, 
> was mir nicht richtig einläuchtet.
> Wozu definiere ich denn: self.Bind(wx.EVT_BUTTON, self.OnAddProject, 
> self.button_1) wenn es keine Wirkung hat?
>
>
> kann mir jemand einen Tipp dazu geben?
> vielen dank für jeden Hinweis ;-)
>   
Habs doch selbst gefunden.
Wenn ich aus beiden buttons ein stockitem ADD mache, dann setzt er die 
id für beide gleich und das verhalten kann ich auch nicht abschalten.
In dem Fall interessiert es wxpython recht wenig, was in der 
eventtabelle steht.
Also gehts nur mit einfachen buttons, obwohl ich die 
standardformatierungen ganz nett finde.

Gibt es eigentlich eine Möglichkeit in ein Fenster 2 Frames einzubauen?
Dann könnte man das Fenster 2 Teilen und hätte jeweils einen ADD button 
und könnte auch dafür default=True setzen.

viele Grüße Maik