Plattformunabhängige GUIs mit wxWidgets.
diablo75
User
Beiträge: 30 Registriert: Dienstag 8. September 2009, 23:12
Samstag 19. September 2009, 19:32
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
Flano
User
Beiträge: 43 Registriert: Sonntag 5. September 2004, 14:13
Sonntag 20. September 2009, 17:04
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
def OnExit(self, event):
print('Hallo')
self.Destroy()
Gruß Flano
nemomuk
User
Beiträge: 862 Registriert: Dienstag 6. November 2007, 21:49
Sonntag 20. September 2009, 21:06
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.
diablo75
User
Beiträge: 30 Registriert: Dienstag 8. September 2009, 23:12
Montag 21. September 2009, 19:53
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
jbs
User
Beiträge: 953 Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam
Montag 21. September 2009, 20:51
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.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
diablo75
User
Beiträge: 30 Registriert: Dienstag 8. September 2009, 23:12
Montag 21. September 2009, 21:26
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