Ich lerne gerade mit wxPython umzugehen. Ich kann mir Dinge leichter merken, wenn ich sie mir aufschreibe. Und da spricht doch nichts dagegen, wenn ich es so mache, dass andere auch etwas davon haben.
Hier ein Beispiel für ein einfaches Grundgerüst:
Hier der zugehörige Code:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-15")
class MyFrame(wx.Frame):
"""
Hauptframe mit Menü und Statuszeile
"""
def __init__(self, parent = None, title = "wxPython"):
wx.Frame.__init__(self, parent, -1, title)
# Menüleiste erstellen
menubar = wx.MenuBar()
# Datei-Menü
mnu_file = wx.Menu()
# Datei-Schließen
mnu_f_close = mnu_file.Append(
id = -1, text = u"Sch&ließen", help = u"Schließt dieses Fenster."
)
self.Bind(wx.EVT_MENU, self.close_frame, mnu_f_close)
# Datei-Menü an Menüleiste binden
menubar.Append(mnu_file, u"&Datei")
# Hilfe-Menü
mnu_help = wx.Menu()
# Hilfe-Hilfe
mnu_h_help = mnu_help.Append(
id = -1, text = u"&Hilfe...", help = u"Zeigt die Hilfe an."
)
self.Bind(wx.EVT_MENU, self.show_help, mnu_h_help)
# Separator
mnu_help.AppendSeparator()
# Hilfe-Info
mnu_h_info = mnu_help.Append(
id = -1, text = u"&Info...",
help = u"Zeigt Informationen über das Programm an."
)
self.Bind(wx.EVT_MENU, self.show_info, mnu_h_info)
# Hilfe-Menü an Menüleiste binden
menubar.Append(mnu_help, u"&Hilfe")
# Menüleiste an Frame binden
self.SetMenuBar(menubar)
# Panel erstellen
panel = wx.Panel(self)
##########
# Hier können weitere Widgets auf das Panel gelegt werden...
##########
# Statusleiste erstellen und zuweisen
self.CreateStatusBar()
def close_frame(self, event = None):
"""
Schließt dieses Fenster
"""
self.Close()
def show_help(self, event = None):
"""
Zeigt die Hilfe an. (Als Ersatz dient hier eine einfache MessageBox.)
"""
wx.MessageBox(
message = u"Hier könnte ein Hilfetext stehen...",
caption = u"Hilfe",
style = wx.OK | wx.CENTER | wx.ICON_INFORMATION,
)
def show_info(self, event = None):
"""
Zeigt Programminformationen an. (Als Ersatz dient hier eine einfache
MessageBox.)
"""
wx.MessageBox(
message = u"Info, Info, Info...",
caption = u"Info",
style = wx.OK | wx.CENTER | wx.ICON_INFORMATION,
)
class MyApp(wx.PySimpleApp):
def OnInit(self):
# Frame erstellen, zentrieren und anzeigen
frame = MyFrame()
frame.Center()
frame.Show()
##########
# Hier gehört die fensterübergreifende Anwendungslogik her
##########
return True
def main():
"""
Hauptprozedur
"""
# Jedes wxPython-Programm braucht eine App.
app = MyApp()
# Hier geht es erst weiter, wenn alle Fenster geschlossen wurden.
app.MainLoop()
# Die Hauptprozedur wird nur gestartet, wenn dieses Python-Modul direkt aufgerufen
# wurde. Wenn dieses Modul von einem anderen Modul importiert wurde, dann passiert
# nichts. Dafür sind die folgenden zwei Zeilen Code zuständig.
if __name__ == "__main__":
main()
Gerold
Edit: Code ein wenig verbessert...