Seite 1 von 1

Event wird nicht ausgelöst

Verfasst: Samstag 19. September 2009, 19:32
von diablo75
Hy @ all
Habe ein Problem das mein Event einfach nicht ausgeführt wird - selbst beim debugen mit nen breakpoint hüpft er nicht rein.

Code: Alles auswählen

class CustomMenuBar (wx.MenuBar):
    def __init__(self):
        wx.MenuBar.__init__(self,-1)
        menuDatei = wx.Menu()
        self.Append(menuDatei,"Datei")
        menuhelp = wx.Menu()
        self.Append(menuhelp,"Hilfe")
        menuDatei.AppendSeparator()
        Beenden = menuDatei.Append(-1,"Beenden")
        self.Bind(wx.EVT_MENU,self.OnExit, Beenden)
        
    def OnExit(self,event): #Funkt nicht
        print("Hallo")
        self.Close(True)  
Weiters würde self.Close(True) funktionieren? Da ja self meine CustomMenuBar ist oder würde das mit self.Destroy() funktionieren?

Im Buch WxPython in Action ist ein ähnliches Beispiel und dort funktioniert es.

Thx für eure Hilfe

Verfasst: Sonntag 20. September 2009, 17:04
von Flano
Werde nicht so recht schlau aus deinem Beispiel. Ich vermisse einen Frame, wo vor dem schließen def OnExit() ausgeführt wird. Vielleicht hilft dir das weiter:

Code: Alles auswählen

self.Bind(wx.EVT_CLOSE, self.OnExit)

Code: Alles auswählen

def OnExit(self, event):
    print('Hallo')
    self.Destroy()
Gruß Flano

Verfasst: Sonntag 20. September 2009, 21:06
von nemomuk
Du musst logischerweise den Frame schließen und nicht die Menubar.

Es muss also so in der Art aussehen:

Code: Alles auswählen

class CustomMenuBar(wx.MenuBar):
    def __init__(self, frame):
        wx.MenuBar.__init__(self, frame, -1)
        self.frame = frame
        menuDatei = wx.Menu()
        self.Append(menuDatei,"Datei")
        menuhelp = wx.Menu()
        self.Append(menuhelp, "Hilfe")
        menuDatei.AppendSeparator()
        Beenden = menuDatei.Append(-1, "Beenden")
        self.Bind(wx.EVT_MENU, self.OnExit, Beenden)
        
    def OnExit(self,event): #Funkt nicht
        print("Hallo")
        self.frame.Close(True)
und bitte halte dich an den Python Style Guide.

Verfasst: Montag 21. September 2009, 19:53
von diablo75
So sieht der komplette Code aus

Code: Alles auswählen

import wx
import time
from TreeFrame import TreePanel
from KdSuchPanel import KdSuchPanel

class MainFrame(wx.Frame):
    def __init__(self,parent,id,title):
        # begin MainFrame.__init__
        wx.Frame.__init__(self,parent,id,title)
        
        self._icon = wx.EmptyIcon()
        self._icon.CopyFromBitmap(wx.Bitmap("wxpdemo.ico", wx.BITMAP_TYPE_ANY))
        self.SetIcon(self._icon)
        self.SetSize((1155, 640))
        
        mainpanel = TreePanel(self, -1)
        secondpanel =KdSuchPanel(self, -1)
   
        sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_1.Add(mainpanel,1, wx.EXPAND)
        sizer_1.Add(secondpanel,6, wx.EXPAND)
        self.SetSizer(sizer_1)
        self.Layout_

        self.sb = CustomStatusBar(self)
        self.SetStatusBar(self.sb)
        
        self.mb = CustomMenuBar()
        self.SetMenuBar(self.mb)
        
        def OnCloseWindow(self):
            self.Destroy()
        
        self.Bind(wx.EVT_CLOSE, OnCloseWindow)
        

class CustomMenuBar (wx.MenuBar):
    def __init__(self):
        wx.MenuBar.__init__(self,-1)
        menuDatei = wx.Menu()
        self.Append(menuDatei,"Datei")
        menuhelp = wx.Menu()
        self.Append(menuhelp,"Hilfe")
        menuDatei.AppendSeparator()
        Beenden = menuDatei.Append(-1,"Beenden")
        self.Bind(wx.EVT_MENU,self.OnExit, Beenden)
        
    def OnExit(self,event):
        print("Hallo")
        self.MainFrame.Close(True)   #Funkt nicht

Verfasst: Montag 21. September 2009, 20:51
von jbs

Code: Alles auswählen

import wx

class MainFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title)
        
        self.mb = CustomMenuBar(self)
        self.SetMenuBar(self.mb)
        
    def Exit(self):
            self.Destroy()
        
class CustomMenuBar (wx.MenuBar):
    def __init__(self, frame):
        wx.MenuBar.__init__(self)
        self.frame = frame
        menuDatei = wx.Menu()
        self.Append(menuDatei,"Datei")
        Beenden = menuDatei.Append(-1 ,"Beenden")
        self.frame.Bind(wx.EVT_MENU, self.OnExit, Beenden)
       
    def OnExit(self,event):
        self.frame.Exit()   #Funkt nicht

app = wx.PySimpleApp()
frame = MainFrame(None, -1, 'title')
frame.Show()
app.MainLoop()
Das Binding muss an den Frame.

Verfasst: Montag 21. September 2009, 21:26
von diablo75
Thx das funktioniert

Was mich aber etwas verwundert ist: Das es ohne

Code: Alles auswählen

app = wx.PySimpleApp()
frame = MainFrame(None, -1, 'title')
funktioniert.

Habe es auf:

Code: Alles auswählen

class CustomMenuBar (wx.MenuBar):
    def __init__(self,MainFrame):
        wx.MenuBar.__init__(self)

        self.frame=MainFrame
geändert und funktioniert ebenfalls