Hi!
Hier findest du ein paar einführende Videos (von Kyran Dale) zu wxPython.
Allerdings möchte ich auf diesem Weg auch darauf aufmerksam machen, dass der Beispielcode in diesen Videos teilweise schöner sein könnte. (Z.B. wird die ID des Frames nicht an wx.Frame.__init__ weitergegeben und man braucht keine extra vorbereiteten IDs zum Definieren von Menüs.)
http://showmedo.com/videos/series?name= ... nersSeries
Trotzdem halte ich die Videos für eine gute Einführung in wxPython und wünsche viel Vergnügen beim Ansehen.
wxPython -- Videos für Anfänger
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Quellcode aus dem dem Video "A First wxPython Application"
Original:
Verbessert:
Wie man sieht, habe ich ein paar Änderungen vorgenommen:
1. Shebang (Magic Line) hinzugefügt
2. Coding hinzugefügt
3. Kürzere Zeilen
4. Standardwerte für die Methode __init__ angegeben
5. Die Variable "id" an wx.Frame.__init__ weitergereicht (statt wx.ID_ANY)
lg
Gerold
Original:
Code: Alles auswählen
import wx
class MainWindow(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,wx.ID_ANY,title,size = (400,200), style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE )
self.control = wx.TextCtrl(self,1,style = wx.TE_MULTILINE)
self.Show(True)
app = wx.PySimpleApp()
frame = MainWindow(None,-1,"Small Editor")
app.MainLoop()
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
class MainWindow(wx.Frame):
def __init__(self, parent = None, id = -1, title = "Small Editor"):
wx.Frame.__init__(
self, parent, id, title, size = (400, 200),
style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE
)
self.control = wx.TextCtrl(self, -1, style = wx.TE_MULTILINE)
self.Show(True)
app = wx.PySimpleApp()
frame = MainWindow()
app.MainLoop()
1. Shebang (Magic Line) hinzugefügt
2. Coding hinzugefügt
3. Kürzere Zeilen
4. Standardwerte für die Methode __init__ angegeben
5. Die Variable "id" an wx.Frame.__init__ weitergereicht (statt wx.ID_ANY)
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Quellcode aus dem Video "Adding a Menubar to Our Sample Editor"
Original:
Vereinfacht:
Wichtigste Änderung: Es sind keine speziellen IDs für die Menüeinträge nötig. Die Zahl -1 bestimmt, dass die ID automatisch generiert werden soll.
lg
Gerold
Original:
Code: Alles auswählen
import wx
ID_ABOUT = 101
ID_EXIT = 110
class MainWindow(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,wx.ID_ANY,title,size = (400,200),
style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE )
self.control = wx.TextCtrl(self,1,style = wx.TE_MULTILINE)
#--- START NEW CODE: ---------------------------------------------------
self.CreateStatusBar()
#------ Setting up the menu.
filemenu = wx.Menu()
filemenu.Append(ID_ABOUT, "&About", "Information about this program")
filemenu.AppendSeparator()
filemenu.Append(ID_EXIT, "E&xit", "Terminate the program")
#------ Creating the menu.
menubar = wx.MenuBar()
menubar.Append(filemenu,"&File")
self.SetMenuBar(menubar)
#--- END NEW CODE ------------------------------------------------------
self.Show(True)
app = wx.PySimpleApp()
frame = MainWindow(None,-1,"Small Editor")
app.MainLoop()
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
class MainWindow(wx.Frame):
def __init__(self, parent = None, id = -1, title = "Small Editor"):
wx.Frame.__init__(
self, parent, id ,title, size = (400,200),
style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE
)
self.control = wx.TextCtrl(self, -1, style = wx.TE_MULTILINE)
#--- START NEW CODE: ---------------------------------------------------
self.CreateStatusBar()
#------ Setting up the menu.
filemenu = wx.Menu()
filemenu.Append(-1, "&About", "Information about this program")
filemenu.AppendSeparator()
filemenu.Append(-1, "E&xit", "Terminate the program")
#------ Creating the menu.
menubar = wx.MenuBar()
menubar.Append(filemenu, "&File")
self.SetMenuBar(menubar)
#--- END NEW CODE ------------------------------------------------------
self.Show(True)
app = wx.PySimpleApp()
frame = MainWindow()
app.MainLoop()
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Quellcode aus dem Video "An Introduction to Event-handling"
Original:
Verändert:
Ich habe das veränderte Beispiel mit mehreren Kommentaren versehen, damit man besser erkennt, was wo passiert.
Die wichtigsten Änderungen zum Original:
1. Man kann Event-Handler mit der Methode **Bind()** an ein Objekt und ein dazugehöriges Event binden. Das hat den großen Vorteil, dass man sich nicht mehr mit irgendwelchen Event-IDs herumschlagen muss. Im Beispiel sind es ja nur zwei IDs, aber in einem ausgewachsenen Programm ist es ein Vielfaches. Die Events werden sofort nach dem Erstellen der Menüeinträge an die entsprechenden Event-Handler gebunden.
2. Statt wx.MessageDialog() verwendete ich wx.MessageBox(). Das erspart das umständlichere Handling des Dialogs. Allerdings ist man damit aber auch nicht mehr so flexibel. Aber darauf kann man meistens verzichten.
lg
Gerold
Original:
Code: Alles auswählen
import wx
ID_ABOUT = 101
ID_EXIT = 110
class MainWindow(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,wx.ID_ANY,title,size = (400,200),
style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE )
self.control = wx.TextCtrl(self,1,style = wx.TE_MULTILINE)
self.CreateStatusBar()
#------ Setting up the menu.
filemenu = wx.Menu()
filemenu.Append(ID_ABOUT, "&About", "Information about this program")
filemenu.AppendSeparator()
filemenu.Append(ID_EXIT, "E&xit", "Terminate the program")
#------ Creating the menu.
menubar = wx.MenuBar()
menubar.Append(filemenu,"&File")
self.SetMenuBar(menubar)
#--- START NEW CODE: ------------------------------------------------------
#------ Setting menu event handlers
wx.EVT_MENU(self, ID_ABOUT, self.OnAbout )
wx.EVT_MENU(self, ID_EXIT, self.OnExit )
#--- END NEW CODE
self.Show(True)
#--- START EVENT HANDLERS ------------------------------------------------------
def OnAbout(self,event):
d = wx.MessageDialog( self, " A sample editor \n in wxPython "
,"About Sample Editor", wx.OK)
# Create a message dialog box
d.ShowModal() # Shows it
d.Destroy() # finally destroy it when finished.
def OnExit(self,event):
self.Close(True) # Close the frame.
#--- END EVENT HANDLERS ------------------------------------------------------
app = wx.PySimpleApp()
frame = MainWindow(None,-1,"Small Editor")
app.MainLoop()
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
class MainWindow(wx.Frame):
def __init__(self, parent = None, id = -1, title = "Small Editor"):
# Init
wx.Frame.__init__(
self, parent, id, title, size = (400,200),
style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE
)
# TextCtrl
self.control = wx.TextCtrl(self, -1, style = wx.TE_MULTILINE)
# StatusBar
self.CreateStatusBar()
# Filemenu
filemenu = wx.Menu()
# Filemenu - About
menuitem = filemenu.Append(-1, "&About", "Information about this program")
self.Bind(wx.EVT_MENU, self.OnAbout, menuitem) # Hier wird der Event-Handler angegeben
# Filemenu - Separator
filemenu.AppendSeparator()
# Filemenu - Exit
menuitem = filemenu.Append(-1, "E&xit", "Terminate the program")
self.Bind(wx.EVT_MENU, self.OnExit, menuitem) # Hier wird der Event-Handler angegeben
# Menubar
menubar = wx.MenuBar()
menubar.Append(filemenu,"&File")
self.SetMenuBar(menubar)
# Show
self.Show(True)
def OnAbout(self,event):
message = "A sample editor\n in wxPython"
caption = "About Sample Editor"
wx.MessageBox(message, caption, wx.OK)
def OnExit(self,event):
self.Close(True) # Close the frame.
app = wx.PySimpleApp()
frame = MainWindow()
app.MainLoop()
# Zerstören der Objekte, damit dieses Beispiel
# im IDLE nicht nur einmal funktioniert.
del frame
del app
Die wichtigsten Änderungen zum Original:
1. Man kann Event-Handler mit der Methode **Bind()** an ein Objekt und ein dazugehöriges Event binden. Das hat den großen Vorteil, dass man sich nicht mehr mit irgendwelchen Event-IDs herumschlagen muss. Im Beispiel sind es ja nur zwei IDs, aber in einem ausgewachsenen Programm ist es ein Vielfaches. Die Events werden sofort nach dem Erstellen der Menüeinträge an die entsprechenden Event-Handler gebunden.
2. Statt wx.MessageDialog() verwendete ich wx.MessageBox(). Das erspart das umständlichere Handling des Dialogs. Allerdings ist man damit aber auch nicht mehr so flexibel. Aber darauf kann man meistens verzichten.
lg
Gerold
Zuletzt geändert von gerold am Sonntag 4. Januar 2009, 22:21, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 312
- Registriert: Dienstag 24. Oktober 2006, 19:31
Hallo Gerold,
klasse wie du das gemacht hast.
Ich beginne mich gerade für wxPython zu interessieren, habe ebenfalls die Videos gesehen.....
Bisher habe ich nur mit Tkinter gearbeitet, eine andere Welt.
Wofür braucht es die id überhaupt? Und wenn sie automatisch generiert wird, kann man, und ist es überhaupt sinnvoll, darauf zugreifen ?
parent = None heisst wohl einfach, dass es an keinen anderen Frame gebunden bzw. eingegliedert wird, oder?
wx.PySimpleApp() ist mir auch noch etwas strange. Was gäbe es da sonst für Möglichkeiten?
Liebe Grüße
rolgal_reloaded
klasse wie du das gemacht hast.
Ich beginne mich gerade für wxPython zu interessieren, habe ebenfalls die Videos gesehen.....
Bisher habe ich nur mit Tkinter gearbeitet, eine andere Welt.
Wofür braucht es die id überhaupt? Und wenn sie automatisch generiert wird, kann man, und ist es überhaupt sinnvoll, darauf zugreifen ?
parent = None heisst wohl einfach, dass es an keinen anderen Frame gebunden bzw. eingegliedert wird, oder?
wx.PySimpleApp() ist mir auch noch etwas strange. Was gäbe es da sonst für Möglichkeiten?
Liebe Grüße
rolgal_reloaded
Code: Alles auswählen
parent = None heisst wohl einfach, dass es an keinen anderen Frame gebunden bzw. eingegliedert wird, oder?
Code: Alles auswählen
wx.PySimpleApp() ist mir auch noch etwas strange. Was gäbe es da sonst für Möglichkeiten?
Man kann es auch so starten:
http://paste.pocoo.org/show/241/
Das benutze ich in Moment. Aber wie ich in einem post von gerold in nem Thread erfahren habe, ist das 'class App'`mit der Methode 'OnInit' schon längst überholt und braucht man nicht mehr. Auch das 'self.SetTopWindow(self.main)' das ich auskommentiert habe braucht man nicht mehr, weil bei neueren Versionen der erste Frame
(in dem Beispiel MainWindow) zum Top-Window gemacht wird. Hab gerolds variante noch nicht gestestet gehabt aber ich denke das dürfte vom Ergebnis her nicht anders sein wie die alte Variante.