Guía para aprender wxPython fácilmente
Guía para aprender wxPython fácilmente
Contenido
1. Aprenda Python
3. Instalar wxPython
Hemos tenido muchas preguntas en el newsgroup preguntando cmo aprender wxPython. Esta pgina ofrece
algunos consejos sobre cmo hacer exactamente eso.
Aprenda Python
Si eres nuevo en Python, y especialmente si eres nuevo en la programacin en general, lo ms prctico es
aprender primero Python, sin ningn tipo de GUI. La espera puede ser frustrante, pero vale la pena. Python
es un lenguaje muy potente capaz de hacer muchas cosas con y sin GUIs.
Como mnimo, debe comprender temas como funciones, mdulos y clases. Sin ellos, aprender wxPython
ser una experiencia frustrante. El sitio web de Python tiene una excelente gua para los principiantes que te
lleva paso a paso a travs del proceso de aprendizaje del idioma.
Http://www.python.org/about/gettingstarted/
Instalar wxPython
Si an no tiene instalado wxPython, consulte la pgina Cmo instalar wxPython .
Leer los tutoriales de wxPython
Tutoriales de Wiki : Un buen lugar para empezar es la pgina de Inicio . Entonces usted debe mirar el curso
de obstculo y la demostracin completamente funcional .
Tutorial externo : Otro gran recurso es el tutorial de Zetcode wxPython . Abarca el uso de una amplia gama
de temas, incluyendo: introduccin, mens / barras de herramientas, clasificadores, eventos, la API de
dibujo, widgets, la creacin de widgets personalizados y demuestra varias aplicaciones "esqueleto".
Desafortunadamente, muchos de los ejemplos que encontrars no han sido actualizados para reflejar este
estilo. Como se beneficiar con el uso de buen estilo, moderno, asegrese de estudiar wxPython Gua de
estilo justo cuando comience, para establecer buenos hbitos.
NOTA : Si las demostraciones no funcionan, asegrese de tener instalada la ltima versin de wxPython. A
veces, las demos utilizan funciones que no se encuentran en versiones anteriores. Para comprobar su versin
de wxPython, ejecute:
import wx
print wx.version()
Una forma popular de trabajar en wxPython es encontrar una demo que est cerca de lo que quieres, copiarla
y luego modificarla para que se adapte a tus necesidades. Otra fuente de ejemplos es el libro de cocina
wxPython .
Est escrito principalmente en C ++, pero hay notas para wxPython y la mayora de las veces puedes
convertir mentalmente la sintaxis de C ++ a la sintaxis de wxPython. No es necesario conocer C ++ para
beneficiarse de esto. Muchos programadores de wxPython no conocen C ++ en absoluto, y todava
encuentran la documentacin de wxWidgets muy til.
Si necesita ayuda para leer los documentos de wxWidgets, la Gua de C ++ para Pythoneers podra ser de
ayuda. O simplemente puede pedir ayuda en la lista de correo .
Hay bastantes gemas en el cdigo de ejemplo que se distribuye con wxPython pero no se encuentran en el
programa de demostracin , por ejemplo, FrogEdit y su mdulo subyacente wx.lib.editor. Haba supuesto
que un editor sera un wx. TextCtrl en los esteroides . Me sorprendi ver que el texto fue dibujado a la
pantalla usando un DC (control de dispositivo) y aprend algunas buenas tcnicas. Tambin estoy "leyendo"
Transana y Task Coach , dos aplicaciones sofisticadas escritas en Python y wxPython, para aprender cmo
se estructuran las aplicaciones grandes. Hay una gran diferencia entre los pequeos ejemplos de este wiki y
el cdigo real del mundo real, por lo que el proceso de analizar grandes aplicaciones es parte integral del
aprendizaje de wxPython.
Hacer preguntas!
La lista de correo de wxPython-users es famosa por sus miembros serviciales y amigables. Puede suscribirse
a ella aqu: http://wxpython.org/maillist.php .
Iniciar sesin
Otro tutorial
FrontPage
Cambios recientes
FindPage
Contenidos de ayuda
Otro tutorial
Pgina inmutable
Informacin
Archivos adjuntos
Mas acciones:
Contenido
1. Prefacio
2. API de wxPython
3. Primeros pasos
1. Wx.Window
2. Trama de wx
3. Wx.MenuBar
4. Wx.ToolBar
4. Gestin de diseo
1. Wx.BoxSizer
2. Wx.GridSizer
3. Wx.GridBagSizer
5. Objetos bsicos
1. Cursores
2. Fuentes
3. Colores
4. Mapas de bits
6. Eventos
1. Ejemplos
7. Dilogos
8. Core Widgets
1. Wx.Button
2. Wx.ToggleButton
3. Wx.BitmapButton
4. Wx.StaticLine
5. Wx.StaticText
6. Wx.StaticBox
7. Wx.ComboBox
8. Wx.CheckBox
9. Wx.StatusBar
10. Wx.RadioButton
11. Wx.Gauge
12. Wx.Slider
13. Wx.ListBox
14. Wx.SpinCtrl
15. Wx.ListCtrl
16. Wx.SplitterWindow
17. Wx.ScrolledWindow
18. Wx.TreeCtrl
19. Wx.Notebook
9. Clases wx.lib
1. Gestos de ratn
2. AnalogClockWindow
1. CalendarCtrl
2. LEDNumberC trl
14. Trazado
2. Funciones de dilogo
3. Otras funciones
18. Esqueletos
1. Cazador de archivos
2. Hoja de clculo
4. Botn interactivo
6. UndoRedoFramework
20. Garras
1. Tom
2. Editor
3. Kika
21. Apndice
1. ID de cursor
2. Estilos de wx.Frame
4. Wx.Pen estilos
5. Estilos wx.Brush
6. Estilos de CalendarCtrl
7. Cdigos de teclado
Prefacio
El propsito de este tutorial es empezar con el kit de herramientas de wxPython, desde lo bsico hasta los
temas avanzados. Tiene muchos ejemplos de cdigo, no mucho hablar. Despus de eso, usted ser capaz de
excavar en ti mismo.
lista de correo
libro de referencia
/home/vronskij/bin/wxPython/usr/lib/python2.4/site-packages/wx-2.6-gtk2-unicode/wx - el ltimo
recurso, en mi caja de Linux
Piedra
PyGTK
Tenga en cuenta que este tutorial se realiza en Linux. Algunas secuencias de comandos no funcionan
correctamente en Windows.
Iconos utilizados en este tutorial: icons.tgz Imgenes utilizadas en este tutorial: images.tgz
actualizacin de estado. (Abril de 2007) Todo mi trabajo en wxPython tutorial se ha trasladado a mi sitio
web http://www.zetcode.com/wxpython aqu no voy a aadir ms ejemplos. Si me encuentro algn tiempo,
har un poco de pulido.
API de wxPython
WxPython API es un conjunto de funciones y widgets. Los widgets son bloques de construccin esenciales
de una aplicacin GUI. En widgets de Windows se llama controles. Podemos dividir groseramente
programadores en dos grupos. Codifican aplicaciones o bibliotecas. En nuestro caso, wxPython es una
biblioteca que los programadores de aplicaciones utilizan para codificar aplicaciones. Tcnicamente,
wxPython es un contenedor sobre una API GUI de C ++ llamada wxWidgets. Por lo tanto, no es una API
nativa. Por ejemplo, no escrito directamente en Python. La nica biblioteca GUI nativa para un lenguaje
interpretado que conozco es la biblioteca Swing de Java.
En wxPython tenemos muchos widgets. Estos pueden ser divididos en algunos grupos lgicos.
Widgets de la base
Estos widgets proporcionan funcionalidad bsica para widgets derivados. Por lo general, no se utilizan
directamente.
Wx.Window
Wx.Control
Wx.ControlWithItem
Trama de wx
Wx.MDIParentFrame
Wx.MDIChildFrame
Wx.Dialog
Wx.PopupWindow
Contenedores
Wx.Panel
Wx.Notebook
Wx.ScrolledWindow
Wx.SplitterWindow
Widgets dinmicos
Wx.Button
Wx.BitmapButton
Wx.Choice
Wx.ComboBox
Wx.CheckBox
Wx.gif
Wx.ListBox
Wx.RadioBox
Wx.RadioButton
Wx.ScrollBar
Wx.SpinButton
Wx.SpinCtrl
Wx.Slider
Wx.TextCtrl
Wx.ToggleButton
Widgets estticos
Wx.Gauge
Wx.StaticText
Wx.StaticBitmap
Wx.StaticLine
Wx.StaticBox
Otros widgets
Estos widgets implementan barra de estado, barra de herramientas y barra de mens en una aplicacin.
Wx.MenuBar
Wx.ToolBar
Wx.StatusBar
Primeros pasos
Comenzamos con un ejemplo simple.
#!/usr/bin/python
# simple.py
import wx
app = wx.App()
app.MainLoop()
import wx
Un objeto de aplicacin se crea iniciando la clase wx.App .
App = wx.App ()
Creamos un widget de marco. La ventana slo aparece si llamamos al mtodo Show () en un widget.
La ltima lnea entra en un Mainloop. Un mainloop es un ciclo interminable que capta todos los eventos que
vienen a su aplicacin. Es una parte integral de cualquier aplicacin GUI de Windows.
App.MainLoop ()
Aunque el cdigo es muy simple, puedes hacer muchas cosas con tu ventana. Puede maximizarlo,
minimizarlo, moverlo, cambiar su tamao. Todas estas cosas ya han sido hechas.
Figura: simple.py
Wx.Window
Wx.Window es una clase base de la que heredan muchos widgets. Por ejemplo, el widget wx.Frame hereda
de wx.Window. Tcnicamente significa que podemos usar los mtodos de wx.Window para todos los
descendientes. Introduciremos aqu algunos de sus mtodos.
Show (show = True) - Muestra u oculta la ventana. Show puede ser True o False.
#!/usr/bin/python
# simple2.py
import wx
app = wx.App()
app.MainLoop()
Creamos un tooltip 'Esto es un marco'. El cursor se ajusta a un cursor de lupa. Posibles identificadores de
cursor: (ver parte inferior) Colocamos la ventana en la esquina superior izquierda y la clasificamos a
300x250 pxeles. El ttulo se establece en 'simple2.py'.
wx.Frame
Wx.Frame es un widget de contenedor. Esto significa que puede contener otros widgets. Tiene el constructor
siguiente:
Un constructor es un tipo especial de una funcin. Se llama cuando se crea un objeto. Para nosotros es
importante que cuando queramos crear un nuevo widget, simplemente llamemos a su constructor. Python
habilita los parmetros con valores predeterminados. As que los nicos parmetros obligatorios en
wx.Frame son parent, id y title. Si especifica todos los valores de los parmetros en orden, no es necesario
especificar los nombres de los parmetros. Por ejemplo, desea crear un widget wx.Frame, que no tiene
padre, su identificador es 100, el ttulo es 'Ttulo', la posicin es (100,50) y el tamao es (100,100).
Aqu hemos omitido el parmetro pos. Por lo tanto, debemos proporcionar explcitamente el parmetro size.
#!/usr/bin/python
# icon.py
import wx
def main():
app = wx.App()
if __name__ == '__main__':
main()
El nombre del icono es Tipi.ico. El icono se encuentra en el directorio actual. El primer parmetro del
constructor de un icono es el nombre del archivo. El segundo parmetro especifica el tipo de archivo.
Como usted ha notado, la estructura de nuestra aplicacin ha cambiado. Este es un estndar en los
programas de Python. En los programas de Python __name__ es una variable especial. Los programas ms
complicados consisten en varios archivos. Por lo general, slo hay un archivo, que inicia la aplicacin. Para
este archivo, Python establece la variable __name__ en '__main__' . Esto sucede cuando inicia una
aplicacin desde la lnea de comandos o cuando hace clic en el archivo. Por lo tanto, cuando hace clic en el
archivo icon.py o lo inicia desde la lnea de comandos, la variable __name__ equivale a '__main__' .
Entonces se llama a la funcin main () .
Figura: icon.py
Wx.MenuBar
Para configurar una barra de mens en su aplicacin wxPython es bastante simple. Discutiremos la adicin
de mens a la barra de mens, aadiendo submens a mens existentes. Cada men consta de men. Los
menudos pueden ser elementos normales, artculos de verificacin o artculos de radio.
Menubar = wx.MenuBar ()
File = wx.Menu ()
Edit = wx.Menu ()
Help = wx.Menu ()
Luego agregamos algunos elementos al men. Esto se puede hacer de dos formas.
Podemos separar las secciones lgicas en los mens con una lnea horizontal.
File.AppendSeparator()
Si desea tener algunos iconos en sus mens, debe crear objetos MenuItem manualmente .
WxPython toolkit slo puede poner bitmaps en mens. Por lo tanto, tenemos que convertir nuestros archivos
PNG en mapas de bits.
Menubar.Append(archivo, '&File')
Menubar.Append(editar, '&Editar')
Menubar.Append(ayuda, '&Ayuda')
self.SetMenuBar(menubar)
Vamos a resumirlo en un pequeo guin.
#!/usr/bin/python
# menu1.py
import wx
class MyMenu(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(200,
150))
menubar = wx.MenuBar()
file = wx.Menu()
edit = wx.Menu()
help = wx.Menu()
file.Append(101, '&Open', 'Open a new document')
file.Append(102, '&Save', 'Save the document')
file.AppendSeparator()
quit = wx.MenuItem(file, 105, '&Quit\tCtrl+Q', 'Quit the Application')
quit.SetBitmap(wx.Image('stock_exit-16.png',
wx.BITMAP_TYPE_PNG).ConvertToBitmap())
file.AppendItem(quit)
menubar.Append(file, '&File')
menubar.Append(edit, '&Edit')
menubar.Append(help, '&Help')
self.SetMenuBar(menubar)
self.CreateStatusBar()
class MyApp(wx.App):
def OnInit(self):
frame = MyMenu(None, -1, 'menu1.py')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
Hasta ahora hemos visto los elementos de men normales predeterminados. Aqu vemos, cmo podemos
definir explcitamente elementos de verificacin, elementos normales o elementos de radio.
Quit = wxMenuItem (archivo, 105, '& Quit \ tCtrl + Q', 'Salir de la aplicacin',
wx.ITEM_NORMAL)
Posible wx.ItemKind-s
Submenu = wx.Menu()
Ahora discutimos cmo responder a las acciones de los usuarios. Lo tocaremos brevemente y lo
explicaremos ms adelante con ms detalle.
As, cuando un usuario de nuestra aplicacin selecciona un elemento de men, se genera un evento.
Debemos proporcionar un manejador de eventos, que reaccionar a este evento en consecuencia. Manejar
eventos en wxPython es el ms elegante y simple que he visto hasta ahora. Cuando examinamos el libro de
referencia, encontramos el controlador wx.EVT_MENU en la seccin Manejo de eventos.
Supongamos que queremos agregar un controlador de eventos a nuestro elemento de men de salir.
Tenemos que proporcionar tres elementos de informacin. El objeto, donde enlazamos nuestro controlador
de eventos. En nuestro caso, el objeto principal de la aplicacin. El ID del elemento de men
correspondiente. Y el nombre del mtodo, que har nuestro trabajo.
El mtodo que reaccionar a las acciones del usuario tiene dos parmetros. El primero es el objeto donde se
define este mtodo. El segundo es el evento generado. Esta vez, lo hacemos sin l. Simplemente cerramos
nuestra aplicacin.
self.Centre()
#!/usr/bin/python
# menu2.py
import wx
class MyMenu(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(380,
250))
menubar = wx.MenuBar()
file = wx.Menu()
edit = wx.Menu()
help = wx.Menu()
file.Append(101, '&Open', 'Open a new document')
file.Append(102, '&Save', 'Save the document')
file.AppendSeparator()
quit = wx.MenuItem(file, 105, '&Quit\tCtrl+Q', 'Quit the Application')
quit.SetBitmap(wx.Image('stock_exit-
16.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap())
file.AppendItem(quit)
edit.Append(201, 'check item1', '', wx.ITEM_CHECK)
edit.Append(202, 'check item2', kind=wx.ITEM_CHECK)
submenu = wx.Menu()
submenu.Append(301, 'radio item1', kind=wx.ITEM_RADIO)
submenu.Append(302, 'radio item2', kind=wx.ITEM_RADIO)
submenu.Append(303, 'radio item3', kind=wx.ITEM_RADIO)
edit.AppendMenu(203, 'submenu', submenu)
menubar.Append(file, '&File')
menubar.Append(edit, '&Edit')
menubar.Append(help, '&Help')
self.SetMenuBar(menubar)
self.Centre()
self.Bind(wx.EVT_MENU, self.OnQuit, id=105)
class MyApp(wx.App):
def OnInit(self):
frame = MyMenu(None, -1, 'menu2.py')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
Figura: menu2.py
Wx.ToolBar
La barra de herramientas es un widget que agrupa los comandos o acciones ms utilizados de la aplicacin.
Tpicamente guardar, abrir, cortar, copiar, pegar, deshacer, rehacer, etc. Su propsito es ahorrar tiempo.
Necesita un clic para realizar una accin desde la barra de herramientas y dos clics en el men.
#!/usr/bin/python
# toolbar.py
import wx
class MyToolBar(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(350,
250))
vbox = wx.BoxSizer(wx.VERTICAL)
toolbar = wx.ToolBar(self, -1, style=wx.TB_HORIZONTAL | wx.NO_BORDER)
toolbar.AddSimpleTool(1, wx.Image('stock_new.png',
wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')
toolbar.AddSimpleTool(2, wx.Image('stock_open.png',
wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Open', '')
toolbar.AddSimpleTool(3, wx.Image('stock_save.png',
wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Save', '')
toolbar.AddSeparator()
toolbar.AddSimpleTool(4, wx.Image('stock_exit.png',
wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Exit', '')
toolbar.Realize()
vbox.Add(toolbar, 0, border=5)
self.SetSizer(vbox)
self.statusbar = self.CreateStatusBar()
self.Centre()
class MyApp(wx.App):
def OnInit(self):
frame = MyToolBar(None, -1, 'toolbar.py')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
Wx.BoxSizer se explicar ms adelante en la seccin de diseo. El widget de la barra de herramientas se
crea en tres pasos.
toolbar.AddSimpleTool(1, wx.Image('stock_new.png',
wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')
Al final, llamamos el mtodo Realize () . Este mtodo muestra o muestra el widget de la barra de
herramientas.
Toolbar.Realize()
El widget de la barra de herramientas tiene varios controladores de eventos. Al hacer clic en un icono de la
barra de herramientas, se genera un evento wx.EVT_COMMAND_TOOL_CLICKED. Vinculamos este
evento a un mtodo especificado con el controlador wx.EVT_TOOL.
Con el fin de mostrar algn resultado significativo para nuestros eventos, hemos configurado una barra de
estado.
self.statusbar = self.CreateStatusBar()
Esta es otra extensin wxPython. As que cuando hacemos clic en un botn de la barra de herramientas,
aparece un mensaje en la barra de estado. Esto se hace con el mtodo SetStatusText () .
Figura: toolbar.py
Gestin de layout
Hay bsicamente dos mtodos para el diseo de nuestros widgets. El primer mtodo es manual. Colocamos
widgets especificando la posicin en el constructor del widget.
#!/usr/bin/python
# layout.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(250,
50))
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'layout.py')
frame.Show(True)
frame.Centre()
return True
app = MyApp(0)
app.MainLoop()
Cuando se cambia el tamao de la ventana, el tamao y la posicin de los botones no cambian. Esta es una
de las principales caractersticas del posicionamiento manual de los widgets.
Figura: layout.py
El segundo mtodo consiste en utilizar gestores de layout. Este mtodo es frecuente en programas reales.
Bsicamente, usted utiliza sizers. Discutiremos
Wx.BoxSizer
Wx.StaticBoxSizer
Wx.GridSizer
Wx.GridBagSizer
Wx.BoxSizer
Hagamos un programa en el que tres botones ocuparn una fila colocada en la parte superior de la ventana.
Estos botones cambiarn de tamao cuando se cambie el tamao de la ventana.
#!/usr/bin/python
# wxboxsizer.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, (-1, -1), wx.Size(250, 50))
panel = wx.Panel(self, -1)
box = wx.BoxSizer(wx.HORIZONTAL)
box.Add(wx.Button(panel, -1, 'Button1'), 1 )
box.Add(wx.Button(panel, -1, 'Button2'), 1 )
box.Add(wx.Button(panel, -1, 'Button3'), 1 )
panel.SetSizer(box)
self.Centre()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'wxboxsizer.py')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
Figura: wxboxsizer.py
El parmetro de proporcin define la proporcin o proporcin de espacio del generador disponible que el
widget ocupar en la direccin de la orientacin definida. Supongamos que tenemos tres botones con las
proporciones 0, 1 y 2. Se aaden a un wx.BoxSizer horizontal . El botn con la proporcin 0 no cambiar
en absoluto cuando cambie el ancho del tamao del generador (tamao horizontal) (es decir, el botn
siempre tendr el mismo ancho). El resto del ancho del clasificador se divide en 3 (2 + 1) acciones. El botn
con la proporcin 2 ocupar siempre 2 de esas 3 partes (su anchura ser 2/3 del ancho disponible), y el botn
con la proporcin 1 ocupar siempre una de esas acciones.
Con el parmetro flag, puede configurar adicionalmente el comportamiento de los widgets dentro de un
wx.BoxSizer . Podemos controlar la frontera (aunque "relleno" sera un nombre ms exacto que "borde")
entre los widgets. Aadimos un poco de espacio entre widgets en pxeles. Para aplicar la frontera,
necesitamos definir qu lados usarn el borde. Podemos elegir entre estas banderas:
Wx.LEFT
Wx.RIGHT
Wx.BOTTOM
Wx.TOP
Wx.ALL
Podemos combinarlos con el | operador. P.ej. wx.LEFT | Wx.BOTTOM . Si utilizamos el indicador
wx.EXPAND , nuestro widget usar todo el espacio que est disponible en la direccin perpendicular a la
direccin orientar del generador. Por ltimo, tambin podemos definir la alineacin de nuestros widgets. Lo
hacemos con las siguientes banderas:
Wx.ALIGN_LEFT
Wx.ALIGN_RIGHT
Wx.ALIGN_TOP
Wx.ALIGN_BOTTOM
Wx.ALIGN_CENTER_VERTICAL
Wx.ALIGN_CENTER_HORIZONTAL
Wx.ALIGN_CENTER
Un ejemplo:
#!/usr/bin/python
# layout3.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, (-1, -1), wx.Size(450, 300))
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'layout3.py')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
En nuestro ejemplo tenemos nuevamente tres botones. El primero tiene un borde alrededor de todos sus
lados. Es el nico que cambia en la dimensin horizontal cuando se redimensiona la ventana principal. La
segunda ocupa todo el espacio que se le asigna en la direccin vertical. El tercero est alineado en el centro.
Podemos combinar varios wx.BoxSizer-s . Por ejemplo, podemos poner varios wx.BoxSizer -s
horizontales en un wx.BoxSizer vertical y viceversa . De esta manera podemos hacer diseos
complejos.
#!/usr/bin/python
# borders.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
self.SetSize((400, 120))
self.SetSizer(hbox)
self.Centre()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'borders.py')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
Mostramos cuatro estilos de borde diferentes disponibles en wxPython. La frontera es una decoracin simple
de la ventana.
Fronteras disponibles:
Wx.SIMPLE_BORDER
Wx.RAISED_BORDER
Wx.SUNKEN_BORDER
Wx.NO_BORDER
Wx.GridSizer
Wx.GridSizer establece a sus hijos en una tabla bidimensional. El ancho de cada campo es el ancho del
nio ms ancho. La altura de cada campo es la altura del nio ms alto.
#!/usr/bin/python
# calculator.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
gs = wx.GridSizer(4, 4, 3, 3)
gs.AddMany([(wx.Button(self, 20, 'Cls'), 0, wx.EXPAND),
(wx.Button(self, 21, 'Bck'), 0, wx.EXPAND),
(wx.StaticText(self, -1, ''), 0, wx.EXPAND),
(wx.Button(self, 22, 'Close'), 0, wx.EXPAND),
(wx.Button(self, 1, '7'), 0, wx.EXPAND),
(wx.Button(self, 2, '8'), 0, wx.EXPAND),
(wx.Button(self, 3, '9'), 0, wx.EXPAND),
(wx.Button(self, 4, '/'), 0, wx.EXPAND),
(wx.Button(self, 5, '4'), 0, wx.EXPAND),
(wx.Button(self, 6, '5'), 0, wx.EXPAND),
(wx.Button(self, 7, '6'), 0, wx.EXPAND),
(wx.Button(self, 8, '*'), 0, wx.EXPAND),
(wx.Button(self, 9, '1'), 0, wx.EXPAND),
(wx.Button(self, 10, '2'), 0, wx.EXPAND),
(wx.Button(self, 11, '3'), 0, wx.EXPAND),
(wx.Button(self, 12, '-'), 0, wx.EXPAND),
(wx.Button(self, 13, '0'), 0, wx.EXPAND),
(wx.Button(self, 14, '.'), 0, wx.EXPAND),
(wx.Button(self, 15, '='), 0, wx.EXPAND),
(wx.Button(self, 16, '+'), 0, wx.EXPAND) ])
sizer.Add(gs, 1, wx.EXPAND)
self.SetSizer(sizer)
self.Centre()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'calculator.py')
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
output = eval(formula)
Si hacemos un error en nuestra frmula, se muestra un mensaje de error. Observe cmo conseguimos poner
un espacio entre los botones Bck y Close. Simplemente ponemos un wx.StaticText vaco all . Tales
trucos son bastante comunes.
Figura: calculator.py
Wx.GridBagSizer
La separacin vertical y horizontal define el espacio en pxeles utilizado entre los nios. Agregue elementos
a la cuadrcula con el mtodo Add ().
Add(self, item, tuple pos, tuple span=wx.DefaultSpan, integer flag=0, integer border=0,
userData=None)
El elemento es un widget que inserta en la cuadrcula. Pos especifica la posicin en la cuadrcula virtual. La
celda topleft tiene pos de (0, 0). Span es una extensin opcional del widget. Por ejemplo, span de (3, 2)
abarca un widget a travs de 3 filas y 2 columnas. Bandera y frontera fueron discutidos anteriormente por
wx.BoxSizer .
Los elementos de la cuadrcula pueden cambiar su tamao o mantener el tamao predeterminado, cuando se
cambia el tamao de la ventana. Si desea que sus elementos crezcan y se reduzcan, puede utilizar estos dos
mtodos.
AddGrowableRow(integer row)
AddGrowableCol(integer col)
#!/usr/bin/python
# wxgridbagsizer.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition)
sizer = wx.GridBagSizer(9, 9)
sizer.Add(wx.Button(self,-1, "Button"), (0, 0), wx.DefaultSpan, wx.ALL, 5)
sizer.Add(wx.Button(self,-1, "Button"), (1, 1), (1,7), wx.EXPAND)
sizer.Add(wx.Button(self,-1, "Button"), (6, 6), (3,3), wx.EXPAND)
sizer.Add(wx.Button(self,-1, "Button"), (3, 0), (1,1), wx.ALIGN_CENTER)
sizer.Add(wx.Button(self,-1, "Button"), (4, 0), (1,1), wx.ALIGN_LEFT)
sizer.Add(wx.Button(self,-1, "Button"), (5, 0), (1,1), wx.ALIGN_RIGHT)
sizer.AddGrowableRow(6)
sizer.AddGrowableCol(6)
self.SetSizerAndFit(sizer)
self.Centre()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, "wxgridbagsizer.py")
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
Si desea que su elemento abarque ms de una celda, debe proporcionar el indicador wx.EXPAND .
self.SetSizerAndFit(sizer)
Este mtodo es igual que SetSizer() excepto que tambin enva sugerencias de tamao a la ventana.
Todos los botones se muestran en la ventana.
Objetos bsicos
WxPython es una coleccin de varios objetos. Podemos dividirlos en dos grupos.
Objetos visuales
Objetos no visuales
Ejemplos de objetos visuales son: widgets, fuentes, colores o cursores. Objetos no visuales: calibradores
(sizers), temporizadores (timers) o eventos.
Cursores
Un cursor es un objeto grfico simple. Se utiliza para indicar la posicin en el monitor o en cualquier otro
dispositivo de visualizacin. Por lo general, cambia dinmicamente. Normalmente, cuando coloca un
puntero del ratn sobre un hipertexto, el cursor cambia a una mano.
En el siguiente ejemplo de cdigo, creamos una cuadrcula de nueve wx.Panels . Cada panel muestra
un cursor diferente.
#!/usr/bin/python
# cursors.py
import wx
class Cursors(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
vbox = wx.BoxSizer(wx.VERTICAL)
sizer = wx.GridSizer(3, 3, 2, 2)
for i in cursors:
panel = wx.Panel(self, -1, style=wx.SUNKEN_BORDER)
panel.SetCursor(wx.StockCursor(i))
sizer.Add(panel, flag=wx.EXPAND)
self.Centre()
self.Show()
app = wx.App(0)
Cursors(None, -1, 'Cursors.py')
app.MainLoop()
Fuentes
Creamos diferentes tipos de fuentes con el objeto wx.Font. Tiene el constructor siguiente:
family:
wx.DEFAULT
wx.DECORATIVE
wx.ROMAN
wx.SWISS
wx.SCRIPT
wx.MODERN
style:
wx.NORMAL
wx.SLANT
wx.ITALIC
weight:
wx.NORMAL
wx.LIGHT
wx.BOLD
#!/usr/bin/python
# fonts.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(325,
320))
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'fonts.py')
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
Figura: fonts.py
Colores
Un color es un objeto que representa una combinacin de valores de intensidad de rojo, verde y azul (RGB).
Los valores vlidos de RGB estn en el rango de 0 a 255.
Hay tres maneras de configurar los colores. Podemos crear un objeto wx.Colour, usar un nombre de color
predefinido o usar una cadena de valor hexadecimal.
SetBackgroundColour(wx.Colour(0,0,255))
SetBackgroundColour('BLUE')
SetBackgroundColour('#0000FF'
wx.BLACK
wx.WHITE
wx.RED
wx.BLUE
wx.GREEN
wx.CYAN
wx.LIGHT_GREY
Listado a continuacin.
El script colours.py muestra ocho colores diferentes. WxBlack es simple. El verde del mar es potico y #
0000FF tcnico. Depende del desarrollador, qu elegir.
#!/usr/bin/python
# colours.py
import wx
class Colours(wx.Dialog):
def __init__(self, parent, id, title):
gs = wx.GridSizer(4,2,3,3)
gs.AddMany([ (self.pnl1, 0 ,wx.EXPAND),
(self.pnl2, 0, wx.EXPAND),
(self.pnl3, 0, wx.EXPAND),
(self.pnl4, 0, wx.EXPAND),
(self.pnl5, 0, wx.EXPAND),
(self.pnl6, 0, wx.EXPAND),
(self.pnl7, 0, wx.EXPAND),
(self.pnl8, 0, wx.EXPAND) ])
def SetColors(self):
self.pnl1.SetBackgroundColour(wx.BLACK)
self.pnl2.SetBackgroundColour(wx.Colour(139,105,20))
self.pnl3.SetBackgroundColour(wx.RED)
self.pnl4.SetBackgroundColour('#0000FF')
self.pnl5.SetBackgroundColour('sea green')
self.pnl6.SetBackgroundColour('midnight blue')
self.pnl7.SetBackgroundColour(wx.LIGHT_GREY)
self.pnl8.SetBackgroundColour('plum')
app = wx.App(0)
Colours(None, -1, 'colours.py')
app.MainLoop()
Figura: color.py
La base de datos completa tiene actualmente cerca de 630 nombres de colores diferentes. La lista se puede
encontrar en el archivo colourdb.py. Tambin se muestra en la demo wxPython. En randomcolours.py script
tenemos una sola ventana. Cambiamos el color de fondo de la ventana al color elegido aleatoriamente.
#!/usr/bin/python
# randomcolours.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(400,
350))
class MyApp(wx.App):
def OnInit(self):
updateColourDB()
frame = MyFrame(None, -1, 'randomcolours.py')
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
Mapas de bits
Hay dos tipos de grficos. Vector y mapa de bits . Con grficos vectoriales, las imgenes se crean con
frmulas matemticas que definen todas las formas de la imagen. Se utilizan objetos geomtricos como
curvas y polgonos. Un mapa de bits o un mapa de bits es una coleccin de bits que forman una imagen. Es
una cuadrcula de puntos individuales almacenados en la memoria o en un archivo. Cada punto tiene su
propio color. Cuando se muestra la imagen, el ordenador transfiere un mapa de bits en pxeles en monitores
o puntos de tinta en las impresoras. La calidad de un mapa de bits se determina por la resolucin y la
profundidad de color de la imagen. La resolucin es el nmero total de pxeles en la imagen. La
profundidad de color es la cantidad de informacin en cada pxel.
PNG
JPEG
GIF
PELEA
BMP
#!/usr/bin/python
# bitmap.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size = (270, 270))
self.bitmap = wx.Bitmap('memento.jpg')
wx.EVT_PAINT(self, self.OnPaint)
self.Centre()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'Memento')
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
Figura: bitmap.py
Eventos
Los eventos son parte integral de todas las aplicaciones GUI. Todas las aplicaciones GUI estn orientadas a
eventos. Una aplicacin reacciona a diferentes tipos de eventos que se generan durante su vida til. Los
eventos son generados principalmente por el usuario de una aplicacin. Pero tambin pueden ser generados
por otros medios. Por ejemplo conexin a internet, administrador de ventanas, temporizador. As que cuando
llamamos MainLoop() mtodo, nuestra aplicacin espera a que se generen los eventos. El mtodo
MainLoop() finaliza cuando salimos de la aplicacin.
Vincular un evento llamando al mtodo Bind () . El mtodo tiene los siguientes parmetros:
Handler es un objeto a ser llamado. En otras palabras, es un mtodo, que un programador se une a un
evento.
El parmetro source se utiliza cuando queremos diferenciar entre el mismo tipo de evento de
diferentes widgets.
Id parmetro se utiliza, cuando tenemos mltiples botones, elementos de men, etc El ID se utiliza
para diferenciar entre ellos.
Id2 se utiliza cuando es deseable enlazar un manejador a un rango de ids, como con
EVT_MENU_RANGE.
Tenga en cuenta que el mtodo Bind () se define en la clase EvtHandler . Es la clase, de la que
wx.Window hereda. Wx.Window es una clase base para la mayora de widgets en wxPython. Tambin hay
un proceso inverso. Si queremos desvincular un mtodo de un evento, llamamos al mtodo Unbind () .
Tiene los mismos parmetro que el anterior.
Eventos posibles
Wx.ScrollWinEvent
Un evento de desplazamiento enviado por una barra de desplazamiento
incorporada
Wx.ScrollEvent
Un evento de desplazamiento enviado por una barra de desplazamiento
independiente
Ejemplos
El siguiente cdigo es un ejemplo de un wx.ScrollWinEvent . Este evento se genera, cuando hacemos clic
en una barra de desplazamiento incorporada. La barra de desplazamiento incorporada se activa con la
llamada al mtodo SetScrollbar () . Para las barras de desplazamiento independientes, hay otro tipo de
evento, a saber, wx.ScrollEvent .
#!/usr/bin/python
# myscrollwinevent.py
import wx
class MyScrollWinEvent(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
panel = wx.Panel(self, -1)
self.st = wx.StaticText(panel, -1, '0', (30,0))
panel.Bind(wx.EVT_SCROLLWIN, self.OnScroll)
panel.SetScrollbar(wx.VERTICAL, 0, 6, 50);
self.Centre()
class MyApp(wx.App):
def OnInit(self):
msw = MyScrollWinEvent(None, -1, 'myscrollwinevent.py')
msw.Show(True)
return True
app = MyApp(0)
app.MainLoop()
#!/usr/bin/python
# sizeevent.py
import wx
class SizeEvent(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
self.Bind(wx.EVT_SIZE, self.OnSize)
self.Centre()
class MyApp(wx.App):
def OnInit(self):
se = SizeEvent(None, -1, 'sizeevent.py')
se.Show(True)
return True
app = MyApp(0)
app.MainLoop()
#!/usr/bin/python
# moveevent.py
import wx
class MoveEvent(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
class MyApp(wx.App):
def OnInit(self):
me = MoveEvent(None, -1, 'moveevent.py')
me.Show(True)
return True
app = MyApp(0)
app.MainLoop()
Se genera un evento de pintura cuando se vuelve a dibujar una ventana. Esto ocurre cuando cambiamos el
tamao de la ventana, maximizarla. Tambin se puede generar un evento de pintura mediante programacin.
Por ejemplo, cuando llamamos al mtodo SetLabel () para cambiar un widget wxStaticText . Tenga en
cuenta que cuando minimizamos una ventana, no se genera ningn evento de pintura.
#!/usr/bin/python
# paintevent.py
import wx
class PaintEvent(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Centre()
class MyApp(wx.App):
def OnInit(self):
pe = PaintEvent(None, -1, 'paintevent.py')
pe.Show(True)
return True
app = MyApp(0)
app.MainLoop()
Cuando pulsamos una tecla en nuestro teclado, wx.KeyEvent se genera. Hay tres manejadores de claves
diferentes:
EVT_KEY_DOWN
EVT_KEY_UP
EVT_CHAR
#!/usr/bin/python
# keyevent.py
import wx
class KeyEvent(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
self.Centre()
self.Show(True)
app = wx.App()
KeyEvent(None, -1, 'keyevent.py')
app.MainLoop()
, qu clave fue pulsada llamando al mtodo GetKeyCode () . En nuestro caso, keycode es
Descubrimos
wx.WXK_ESCAPE.
keycode = event.GetKeyCode()
Dilogos
En wxPython puedes usar dilogos predefinidos o crear tus propios dilogos. Tambin puede crear
aplicaciones basadas en dilogos.
#!/usr/bin/python
# simpledialog.py
import wx
class MyDialog(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title)
class MyApp(wx.App):
def OnInit(self):
dia = MyDialog(None, -1, "simpledialog.py")
dia.ShowModal()
dia.Destroy()
return True
app = MyApp(0)
app.MainLoop()
Observe que no puede cambiar el tamao de la ventana de dilogo. El mtodo Destroy() es necesario.
Elimina el dilogo de la memoria. De lo contrario, el script no saldra correctamente.
Hay dos tipos de dilogos. Modal y sin modelo. El dilogo modal no permite que un usuario trabaje con el
resto de la aplicacin hasta que se destruya. Los dilogos modales se crean con el mtodo ShowModal () .
Los cuadros de dilogo son modales cuando se llaman con Show () .
Hay dos mtodos que simplifican la creacin de dilogos. Ambos devuelven un objeto sizer especfico.
#!/usr/bin/python
# customdialog1.py
import wx
class MyDialog(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, size=(350,300))
sizer = self.CreateTextSizer('My Buttons')
sizer.Add(wx.Button(self, -1, 'Button'), 0, wx.ALL, 5)
sizer.Add(wx.Button(self, -1, 'Button'), 0, wx.ALL, 5)
sizer.Add(wx.Button(self, -1, 'Button'), 0, wx.ALL, 5)
sizer.Add(wx.Button(self, -1, 'Button'), 0, wx.ALL|wx.ALIGN_CENTER, 5)
sizer.Add(wx.Button(self, -1, 'Button'), 0, wx.ALL|wx.EXPAND, 5)
self.SetSizer(sizer)
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(550,500))
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'customdialog1.py')
frame.Show(True)
frame.Centre()
return True
app = MyApp(0)
app.MainLoop()
El mtodo CreateButtonSizer () crea una fila de botones. Puede especificar tipos de botones con
diferentes banderas. El mtodo CreateButtonSizer () puede tomar los siguientes indicadores:
wx.OK
wx.CANCEL
wx.YES
wx.NO
wx.HELP
wx.NO_DEFAULT
#!/usr/bin/python
# customdialog2.py
import wx
class MyDialog(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title)
vbox = wx.BoxSizer(wx.VERTICAL)
stline = wx.StaticText(self, 11, 'Discipline ist Macht.')
vbox.Add(stline, 1, wx.ALIGN_CENTER|wx.TOP, 45)
sizer = self.CreateButtonSizer(wx.NO|wx.YES|wx.HELP)
vbox.Add(sizer, 0, wx.ALIGN_CENTER)
self.SetSizer(vbox)
self.Bind(wx.EVT_BUTTON, self.OnYes, id=wx.ID_YES)
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
panel = wx.Panel(self, -1)
wx.Button(panel, 1, 'Show custom Dialog', (50,50))
self.Bind(wx.EVT_BUTTON, self.OnShowCustomDialog, id=1)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'customdialog2.py')
frame.Show(True)
frame.Centre()
return True
app = MyApp(0)
app.MainLoop()
sizer = self.CreateButtonSizer(wxNO|wxYES|wxHELP)
WxPython proporciona varios dilogos comunes. Ahorran a programadores mucho trabajo. Tambin ayudan
a promover las normas en las aplicaciones. Vamos a mostrar estos:
Wx.MessageDialog
Wx.ColourDialog
Wx.FileDialog
Wx.PageSetupDialog
Wx.FontDialog
Wx.DirDialog
Wx.SingleChoiceDialog
Wx.TextEntryDialog
#!/usr/bin/python
# commondialogs.py
import wx
import os, sys
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
self.CreateStatusBar()
menuBar = wx.MenuBar()
menu = wx.Menu()
menu.Append(99, "&Message Dialog", "Shows a Message Dialog")
menu.Append(100, "&Color Dialog", "Shows a Color Dialog")
menu.Append(101, "&File Dialog", "Shows a File Dialog")
menu.Append(102, "&Page Setup Dialog", "Shows a Page Setup Dialog")
menu.Append(103, "&Font Dialog", "Shows a Font Dialog")
menu.Append(104, "&Directory Dialog", "Shows a Directory Dialog")
menu.Append(105, "&SingleChoice Dialog", "Shows a SingleChoice Dialog")
menu.Append(106, "&TextEntry Dialog", "Shows a TextEntry Dialog")
menuBar.Append(menu, "&Dialogs")
self.SetMenuBar(menuBar)
class MyApp(wx.App):
def OnInit(self):
myframe = MyFrame(None, -1, "commondialogs.py")
myframe.CenterOnScreen()
myframe.Show(True)
return True
app = MyApp(0)
app.MainLoop()
La secuencia de comandos muestra ocho diferentes dilogos comunes. Toda la salida se muestra en la barra
de estado.
Core Widgets
En esta seccin, introduciremos widgets bsicos en wxPython. Cada widget tendr un pequeo ejemplo de
cdigo.
Wx.Button
Wx.Button es un simple widget. Contiene una cadena de texto. Se utiliza para activar una accin.
Estilos de wx.Button
wx.BU_LEFT
wx.BU_TOP
wx.BU_RIGHT
wx.BU_BOTTOM
wx.BU_EXACTFIT
wx.NO_BORDER
Mtodos wx.Button
#!/usr/bin/python
# buttons.py
import wx
import random
APP_SIZE_X = 300
APP_SIZE_Y = 200
class MyButtons(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, size=(APP_SIZE_X, APP_SIZE_Y))
self.Centre()
self.ShowModal()
self.Destroy()
app = wx.App(0)
MyButtons(None, -1, 'buttons.py')
app.MainLoop()
Figura: buttons.py
Wx.ToggleButton
Wx.ToggleButton es un botn que tiene dos estados. Presionado y no presionado. Puede alternar entre estos
dos estados haciendo clic en l. Hay situaciones en las que esta funcionalidad encaja bien.
Mtodos wx.ToggleButton
#!/usr/bin/python
# togglebuttons.py
import wx
class ToggleButtons(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, size=(300, 200))
self.colour = wx.Colour(0, 0, 0)
self.Centre()
self.ShowModal()
self.Destroy()
app = wx.App(0)
ToggleButtons(None, -1, 'togglebuttons.py')
app.MainLoop()
Figura: togglebuttons.py
Wx.BitmapButton
Un botn de mapa de bits es un botn, que muestra un mapa de bits. Un botn de mapa de bits puede tener
otros tres estados. Seleccionado, enfocado y visualizado. Podemos establecer un mapa de bits especfico
para esos estados.
Mtodos wx.BitmapButton
Wx.Bitmap GetBitmapLabel () Devolver el mapa de bits de la etiqueta
SetBitmapLabel (mapa de bits wx.Bitmap) Establezca la etiqueta de mapa de bits para el botn
SetBitmapFocus (mapa de bits wx.Bitmap) Establecer el mapa de bits para el estado enfocado
SetBitmapSelected (mapa de bits wx.Bitmap) Establecer el mapa de bits para el estado seleccionado
SetBitmapDisabled (mapa de bits wx.Bitmap) Establecer el mapa de bits para el estado deshabilitado
Un reproductor de vdeo es un buen ejemplo, donde se utilizan los botones de mapa de bits. Podemos ver los
botones de reproduccin, pausa, siguiente, anterior y de volumen. As que creamos un esqueleto de un
reproductor de video en nuestro prximo ejemplo.
#!/usr/bin/python
# player.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(350, 300))
panel = wx.Panel(self, -1)
menubar = wx.MenuBar()
file = wx.Menu()
play = wx.Menu()
view = wx.Menu()
tools = wx.Menu()
favorites = wx.Menu()
help = wx.Menu()
menubar.Append(file, '&File')
menubar.Append(play, '&Play')
menubar.Append(view, '&View')
menubar.Append(tools, '&Tools')
menubar.Append(favorites, 'F&avorites')
menubar.Append(help, '&Help')
vbox = wx.BoxSizer(wx.VERTICAL)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
hbox1.Add(slider1, 1)
hbox2.Add(pause)
hbox2.Add(play, flag=wx.RIGHT, border=5)
hbox2.Add(next, flag=wx.LEFT, border=5)
hbox2.Add(prev)
hbox2.Add((150, -1), 1, flag=wx.EXPAND | wx.ALIGN_RIGHT)
hbox2.Add(volume, flag=wx.ALIGN_RIGHT)
hbox2.Add(slider2, flag=wx.ALIGN_RIGHT | wx.TOP | wx.LEFT, border=5)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(pnl1, 1, flag=wx.EXPAND)
sizer.Add(pnl2, flag=wx.EXPAND | wx.BOTTOM | wx.TOP, border=10)
self.SetMinSize((350, 300))
self.SetMenuBar(menubar)
self.CreateStatusBar()
self.SetSizer(sizer)
self.Centre()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'Player')
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
Figura: player.py
Wx.StaticLine
Este widget muestra una lnea simple en la ventana. Puede ser horizontal o vertical.
Estilos de wx.StaticLine
Wx.LI_HORIZONTAL
Wx.LI_VERTICAL
Mtodos wx.StaticLine
#!/usr/bin/python
# centraleurope.py
import wx
class MyDialog(wx.Dialog):
def __init__ (self, parent, ID, title):
wx.Dialog.__init__(self, parent, ID, title, size=(360, 370))
class MyApp(wx.App):
def OnInit(self):
dia = MyDialog(None, -1, 'centraleurope.py')
dia.ShowModal()
dia.Destroy()
return True
app = MyApp()
app.MainLoop()
Centraleurope.py muestra los pases de Europa central y su poblacin. El wx.StatLine hace que se vea ms
visualmente atractivo.
Figura: centraleurope.py
Wx.StaticText
Estilos de wx.StaticText
Wx.ALIGN_RIGHT
Wx.ALIGN_LEFT
Wx.ALIGN_CENTER / wx.ALIGN_CENTRE
Wx.ST_NO_AUTORESIZE
Mtodos wx.StaticText
Wrap (int Si es posible, establezca cada lnea de texto para analizar los pxeles. Si el ancho es
width) negativo, no se realiza ningn ajuste.
#!/usr/bin/python
# statictext.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(320,
350))
lyrics1 = '''I'm giving up the ghost of love
in the shadows cast on devotion
She is the one that I adore
creed of my silent suffocation
Break this bittersweet spell on me
lost in the arms of destiny'''
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'statictext.py')
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
Figura statictext.py
Wx.StaticBox
Este es un tipo de widget decorador. Se utiliza para agrupar lgicamente varios widgets. Tenga en cuenta que
este widget debe crearse antes de los widgets que contiene, y que esos widgets deben ser hermanos, no
nios, del cuadro esttico.
#!/usr/bin/python
# staticbox.py
import wx
class MyDialog(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, size=(250, 230))
self.Centre()
self.ShowModal()
self.Destroy()
app = wx.App(0)
MyDialog(None, -1, 'staticbox.py')
app.MainLoop()
Figura staticbox.py
Wx.ComboBox
Wx.ComboBox es una combinacin de un campo de texto de una sola lnea, un botn con una imagen de
flecha hacia abajo y un cuadro de lista. Cuando pulse el botn, aparecer un cuadro de lista. El usuario slo
puede seleccionar una opcin de la lista de cadenas suministrada.
Estilos de wx.ComboBox
Wx.CB_DROPDOWN
Wx.CB_READONLY
Wx.CB_SORT
Mtodos wx.ComboBox
Int GetInsertionPoint () Obtener el punto de insercin para el campo de texto del combobox
Replace (int de, int a, valor de Reemplazar el texto entre las posiciones de y hacia las posiciones
cadena) en el campo de texto del combobox
Int SetInsertionPointEnd ()
Establezca el punto de insercin al final del campo de texto del
combobox.
SelectAll (int de, int a) Seleccionar todo el texto en el campo de texto del combo
#!/usr/bin/python
# combobox.py
import wx
class MyDialog(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, size=(250, 270))
self.Centre()
class MyApp(wx.App):
def OnInit(self):
dlg = MyDialog(None, -1, 'combobox.py')
dlg.ShowModal()
dlg.Destroy()
return True
app = MyApp(0)
app.MainLoop()
Figura: combobox.py
Wx.CheckBox
Wx.CheckBox es un widget que tiene dos estados. Encendido y apagado. Es una caja con una etiqueta. La
etiqueta puede ajustarse a la derecha oa la izquierda de la caja. Si la casilla de verificacin est marcada, est
representada por una marca en un cuadro.
Estilos de wx.CheckBox
Wx.ALIGN_RIGHT
Mtodos wx.CheckBox
#!/usr/bin/python
# checkbox.py
import wx
class MyCheckBox(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(250, 170))
self.Show()
self.Centre()
app = wx.App(0)
MyCheckBox(None, -1, 'checkbox.py')
app.MainLoop()
Figura: checkbox.py
Wx.StatusBar
Como su nombre indica, el widget wx.StatusBar se utiliza para mostrar informacin sobre el estado de la
aplicacin. Se puede dividir en varias partes para mostrar diferentes tipos de informacin. Podemos insertar
otros widgets en el wx.StatusBar . Se puede usar como una alternativa a los dilogos, ya que los dilogos
son abusados y no les gustan a la mayora de los usuarios. Podemos crear un
Wx.StatusBar de dos maneras. Podemos crear manualmente nuestro propio mtodo wx.StatusBar y
llamar a SetStatusBar () o podemos simplemente llamar a un mtodo CreateStatusBar () . El ltimo
mtodo crea un wx.StatusBar por defecto para nosotros. En nuestro primer ejemplo, tenemos un
Widget wx.Frame y otros cinco widgets. Si colocamos un puntero del ratn sobre un widget, su descripcin
se muestra en el wx.StatusBar
#!/usr/bin/python
# statusbar.py
import wx
class MyStatusBar(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(250, 200),
style=wx.CAPTION | wx.SYSTEM_MENU | wx.CLOSE_BOX)
panel = wx.Panel(self, 1)
self.sb = self.CreateStatusBar()
self.SetMaxSize((250, 200))
self.SetMinSize((250, 200))
self.Centre()
class MyApp(wx.App):
def OnInit(self):
frame = MyStatusBar(None, -1, 'statusbar.py')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
Figura: statusbar.py
Wx.RadioButton
Wx.RadioButton es un widget que permite al usuario seleccionar una sola opcin exclusiva de un grupo de
opciones. Un grupo de botones de radio se define al tener el primer RadioButton en el grupo que contiene
el estilo wx.RB_GROUP. Todos los dems RadioButtons definidos despus de que el primer
RadioButton con este indicador de estilo se establezca se agregarn al grupo de funciones del primer
RadioButton . Declarar otro RadioButton con el indicador wx.RB_GROUP iniciar un nuevo grupo de
botones de radio.
Estilos de wx.RadioButton
Wx.RB_GROUP
Wx.rb_single
Mtodos wx.RadioButton
Bool GetValue ()
Devuelve True o False dependiendo del estado de
seleccin
#!/usr/bin/python
# radiobuttons.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(200,
150))
panel = wx.Panel(self, -1)
self.rb1 = wx.RadioButton(panel, -1, 'Value A', (10, 10), style=wx.RB_GROUP)
self.rb2 = wx.RadioButton(panel, -1, 'Value B', (10, 30))
self.rb3 = wx.RadioButton(panel, -1, 'Value C', (10, 50))
self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id=self.rb1.GetId())
self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id=self.rb2.GetId())
self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id=self.rb3.GetId())
self.statusbar = self.CreateStatusBar(3)
self.SetVal(True)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'radiobuttons.py')
frame.Show(True)
frame.Center()
return True
app = MyApp(0)
app.MainLoop()
Figura: radiobuttons.py
Wx.Gauge
Estilos wx.Gauge
Wx.GA_HORIZONTAL
Wx.GA_VERTICAL
Wx.Gauge mtodos
#!/usr/bin/python
# gauge.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
self.timer = wx.Timer(self, 1)
self.count = 0
self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
panel = wx.Panel(self, -1)
vbox = wx.BoxSizer(wx.VERTICAL)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
hbox3 = wx.BoxSizer(wx.HORIZONTAL)
hbox1.Add(self.gauge, 1, wx.ALIGN_CENTRE)
hbox2.Add(self.btn1, 1, wx.RIGHT, 10)
hbox2.Add(self.btn2, 1)
hbox3.Add(self.text, 1)
vbox.Add((0, 50), 0)
vbox.Add(hbox1, 0, wx.ALIGN_CENTRE)
vbox.Add((0, 30), 0)
vbox.Add(hbox2, 1, wx.ALIGN_CENTRE)
vbox.Add(hbox3, 1, wx.ALIGN_CENTRE)
panel.SetSizer(vbox)
self.Centre()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'gauge.py')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
Figura: gauge.py
Wx.Slider
Wx.Slider es un widget que tiene un sencillo control. Esta manija se puede tirar hacia adelante y hacia
atrs. De esta manera estamos eligiendo un valor para una tarea especfica. Digamos que queremos
introducir en nuestra aplicacin la edad de un cliente. Para este propsito , wx.Slider podra ser una
buena opcin.
Estilos de wx.Slider
WxSL_HORIZONTAL
WxSL_VERTICAL
WxSL_AUTOTICKS
WxSL_LABELS
WxSL_LEFT
WxSL_RIGHT
WxSL_TOP
WxSL_BOTTOM
WxSL_INVERSE
Mtodos wx.Slider
SetRange (entero min, entero mximo) Ajuste el valor del deslizador mnimo y mximo
PageSize - el nmero de pasos que se mueve el deslizador cuando el usuario se desplaza hacia arriba o hacia
abajo.
#!/usr/bin/python
# slider.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
vbox = wx.BoxSizer(wx.VERTICAL)
hbox = wx.BoxSizer(wx.HORIZONTAL)
self.sld = wx.Slider(panel, -1, 200, 150, 500, wx.DefaultPosition, (250, -1),
wx.SL_AUTOTICKS | wx.SL_HORIZONTAL | wx.SL_LABELS)
btn1 = wx.Button(panel, 8, 'Adjust')
btn2 = wx.Button(panel, 9, 'Close')
wx.EVT_BUTTON(self, 8, self.OnAdjust)
wx.EVT_BUTTON(self, 9, self.OnClose)
vbox.Add(self.sld, 1, wx.ALIGN_CENTRE)
hbox.Add(btn1, 1, wx.RIGHT, 10)
hbox.Add(btn2, 1)
vbox.Add(hbox, 0, wx.ALIGN_CENTRE | wx.ALL, 20)
panel.SetSizer(vbox)
self.SetSize((val*2, val))
def OnClose(self, event):
self.Close()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'slider.py')
frame.Show(True)
frame.Centre()
return True
app = MyApp(0)
app.MainLoop()
En este ejemplo tenemos un control deslizante y dos botones. La posicin inicial del deslizador se establece
en 200. El valor mnimo es 150, el valor mximo es 500. Cuando hace clic en el botn de ajuste, se cambia
el tamao del marco. La altura se establece en el valor elegido por el deslizador, el ancho se establece en 2 x
valor.
Figura: slider.py
Wx.ListBox
Wx.Listbox es un widget que consiste en un cuadro de desplazamiento y una lista de elementos. El usuario
puede seleccionar uno o ms elementos de esa lista. Depende de si se crea como un cuadro de seleccin
nico o mltiple. Los elementos seleccionados estn marcados.
#!/usr/bin/python
# listbox.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, (550, 350))
vbox = wx.BoxSizer(wx.VERTICAL)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
hbox3 = wx.BoxSizer(wx.HORIZONTAL)
self.timer = wx.Timer(self, 1)
self.diff = 0
panel = wx.Panel(self, -1)
self.time_zones = wx.ListBox(panel, 26, wx.DefaultPosition, (170, 130),
zone_list, wx.LB_SINGLE)
self.time_zones.SetSelection(0)
self.text = wx.TextCtrl(panel, -1, 'Central European Time', size=(200, 130),
style=wx.TE_MULTILINE)
self.time = wx.StaticText(panel, -1, '')
btn = wx.Button(panel, wx.ID_CLOSE, 'Close')
hbox1.Add(self.time_zones, 0, wx.TOP, 40)
hbox1.Add(self.text, 1, wx.LEFT | wx.TOP, 40)
hbox2.Add(self.time, 1, wx.ALIGN_CENTRE)
hbox3.Add(btn, 0, wx.ALIGN_CENTRE)
vbox.Add(hbox1, 0, wx.ALIGN_CENTRE)
vbox.Add(hbox2, 1, wx.ALIGN_CENTRE)
vbox.Add(hbox3, 1, wx.ALIGN_CENTRE)
panel.SetSizer(vbox)
self.timer.Start(100)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'listbox.py')
frame.Centre()
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
Wx.SpinCtrl
Este widget le permite incrementar y decrementar un valor. Tiene dos botones de flecha hacia arriba y hacia
abajo para este propsito. El usuario puede introducir un valor en un cuadro o incrementarlo / decrementarlo
mediante estas dos flechas.
Wx.SpinCtrl estilos
Wx.SP_ARROW_KEYS
Wx.SP_WRAP
Wx.SpinCtrl mtodos
SetRange (entero min, entero mximo) Ajuste los valores min y max
#!/usr/bin/python
# spinctrl.py
import wx
class MyDialog(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(350,
310))
class MyApp(wx.App):
def OnInit(self):
dlg = MyDialog(None, -1, 'spinctrl.py')
dlg.Show(True)
dlg.Centre()
return True
app = MyApp(0)
app.MainLoop()
Spinctrl.py es un script basado en dilogo. Nuestra clase principal hereda de wx.Dialog en lugar de
wx.Frame . La principal diferencia es que no podemos cambiar el tamao de la ventana y llamamos al
mtodo Destroy() en lugar de Close(), cuando salimos de la aplicacin. Spinctrl.py script convierte la
temperatura Fahrenheit a Celsius. Este ejemplo es muy popular y se puede encontrar en la mayora de los
libros de cartillas de programacin.
Figura spinctrl.py
Wx.ListCtrl
Vista de informe
vista de la lista
Vista de icono
En nuestro ejemplo, tecleamos los estados y sus capitales y los aadimos al widget de lista. Utilizamos la
vista de informe.
#!/usr/bin/python
# capitals.py
import wx
class MyDialog(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, size=(600,500),
style=wx.DEFAULT_DIALOG_STYLE)
hbox = wx.BoxSizer(wx.HORIZONTAL)
vbox1 = wx.BoxSizer(wx.VERTICAL)
vbox2 = wx.BoxSizer(wx.VERTICAL)
vbox3 = wx.GridSizer(2,2,0,0)
vbox4 = wx.BoxSizer(wx.VERTICAL)
pnl1 = wx.Panel(self, -1, style=wx.SIMPLE_BORDER)
pnl2 = wx.Panel(self, -1, style=wx.SIMPLE_BORDER)
self.lc = wx.ListCtrl(self, -1, style=wx.LC_REPORT)
self.lc.InsertColumn(0, 'State')
self.lc.InsertColumn(1, 'Capital')
self.lc.SetColumnWidth(0, 140)
self.lc.SetColumnWidth(1, 153)
vbox1.Add(pnl1, 1, wx.EXPAND | wx.ALL, 3)
vbox1.Add(pnl2, 1, wx.EXPAND | wx.ALL, 3)
vbox2.Add(self.lc, 1, wx.EXPAND | wx.ALL, 3)
self.tc1 = wx.TextCtrl(pnl1, -1)
self.tc2 = wx.TextCtrl(pnl1, -1)
vbox3.AddMany([ (wx.StaticText(pnl1, -1, 'State'),0, wx.ALIGN_CENTER),
(self.tc1, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL),
(wx.StaticText(pnl1, -1, 'Capital'),0,
wx.ALIGN_CENTER_HORIZONTAL),
(self.tc2,0)])
pnl1.SetSizer(vbox3)
vbox4.Add(wx.Button(pnl2, 10, 'Add'), 0, wx.ALIGN_CENTER| wx.TOP, 45)
vbox4.Add(wx.Button(pnl2, 11, 'Remove'), 0, wx.ALIGN_CENTER|wx.TOP, 15)
vbox4.Add(wx.Button(pnl2, 12, 'Clear'), 0, wx.ALIGN_CENTER| wx.TOP, 15)
vbox4.Add(wx.Button(pnl2, 13, 'Close'), 0, wx.ALIGN_CENTER| wx.TOP, 15)
pnl2.SetSizer(vbox4)
self.Bind (wx.EVT_BUTTON, self.OnAdd, id=10)
self.Bind (wx.EVT_BUTTON, self.OnRemove, id=11)
self.Bind (wx.EVT_BUTTON, self.OnClear, id=12)
self.Bind (wx.EVT_BUTTON, self.OnClose, id=13)
hbox.Add(vbox1, 1, wx.EXPAND)
hbox.Add(vbox2, 1, wx.EXPAND)
self.SetSizer(hbox)
class MyApp(wx.App):
def OnInit(self):
dia = MyDialog(None, -1, 'capitals.py')
dia.ShowModal()
dia.Destroy()
return True
app = MyApp(0)
app.MainLoop()
Figura: capitals.py
Wx.SplitterWindow
Este widget permite dividir el rea principal de una aplicacin en partes. El usuario puede cambiar
dinmicamente esas partes con el puntero del ratn. Esta solucin se puede ver en los clientes de correo
(evolucin) o en el software de grabacin (k3b). Puede dividir un rea vertical u horizontalmente.
#!/usr/bin/python
# splitterwindow.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(350,
300))
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'splitterwindow.py')
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
Wx.ScrolledWindow
Este es uno de los widgets contenedores. Puede ser til, cuando tenemos un rea mayor que una ventana
puede mostrar. En nuestro ejemplo, demostraremos tal caso. Colocamos una imagen grande en nuestra
ventana. Cuando la ventana es ms pequea que nuestra imagen, las barras de desplazamiento se muestran
automticamente.
Mtodos wx.ScrolledWindow
Wx.Size GetScrollPixelsPerUnit ()
Obtener el tamao de una unidad lgica en unidades
fsicas
#!/usr/bin/python
# myscrolledwindow.py
import wx
class MyScrolledWindow(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(500, 400))
sw = wx.ScrolledWindow(self)
bmp = wx.Image('aliens.jpg',wx.BITMAP_TYPE_JPEG).ConvertToBitmap()
wx.StaticBitmap(sw, -1, bmp)
sw.SetScrollbars(20,20,55,40)
class MyApp(wx.App):
def OnInit(self):
frame = MyScrolledWindow(None, -1, 'Aliens')
frame.Show(True)
frame.Centre()
return True
app = MyApp(0)
app.MainLoop()
Wx.TreeCtrl
Wx.TreeCtrl muestra los datos en una jerarqua.
#!/usr/bin/python
# treectrl.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(450,
350))
hbox = wx.BoxSizer(wx.HORIZONTAL)
vbox = wx.BoxSizer(wx.VERTICAL)
panel1 = wx.Panel(self, -1)
panel2 = wx.Panel(self, -1)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'treectrl.py')
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
Primero debemos crear un elemento raz.
root = self.tree.AddRoot('Programmer')
Tambin podemos crear varios niveles simplemente agregando elementos a los elementos existentes.
TR_NO_BUTTONS
TR_HAS_BUTTONS
TR_NO_LINES
TR_LINES_AT_ROOT
TR_SINGLE
TR_MULTIPLE
TR_EXTENDED
TR_HAS_VARIABLE_ROW_HEIGHT
TR_EDIT_LABELS
TR_HIDE_ROOT
TR_ROW_LINES
TR_FULL_ROW_HIGHLIGHT
TR_DEFAULT_STYLE
TR_TWIST_BUTTONS
TR_MAC_BUTTONS
TR_AQUA_BUTTONS
Figura: treectrl.py
Wx.Notebook
Wx.NB_LEFT
Wx.NB_RIGHT
Wx.NB_TOP
Wx.NB_BOTTOM
Mtodos wx.Notebook
SetPadding(wx.Size padding)
Establezca la cantidad de espacio alrededor del icono y la
etiqueta de cada pgina
SetTabSize(wx.Size size) Establecer el tamao de la pestaa
wx.NB_HITTEST_NOWHERE
wx.NB_HITTEST_ONITEM
#!/usr/bin/python
# notebook.py
import wx
import wx.lib.sheet as sheet
class MySheet(sheet.CSheet):
def __init__(self, parent):
sheet.CSheet.__init__(self, parent)
self.SetLabelBackgroundColour('#DBD4D4')
self.SetNumberRows(50)
self.SetNumberCols(50)
class Notebook(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(600, 500))
menubar = wx.MenuBar()
file = wx.Menu()
file.Append(101, 'Quit', '' )
menubar.Append(file, "&File")
self.SetMenuBar(menubar)
wx.EVT_MENU(self, 101, self.OnQuit)
nb = wx.Notebook(self, -1, style=wx.NB_BOTTOM)
self.sheet1 = MySheet(nb)
self.sheet2 = MySheet(nb)
self.sheet3 = MySheet(nb)
nb.AddPage(self.sheet1, "Sheet1")
nb.AddPage(self.sheet2, "Sheet2")
nb.AddPage(self.sheet3, "Sheet3")
self.sheet1.SetFocus()
self.StatusBar()
def StatusBar(self):
self.statusbar = self.CreateStatusBar()
class MyApp(wx.App):
def OnInit(self):
frame = Notebook(None, -1, 'notebook.py')
frame.Show(True)
frame.Centre()
return True
app = MyApp(0)
app.MainLoop()
Figura: notebook.py
Clases wx.lib
Bajo el directorio lib podemos encontrar otros widgets, mejoras o extensiones. Aqu vamos a mostrar
algunas clases ms tiles.
Gestos de ratn
Podemos encontrar gestos de ratn en aplicaciones tan exitosas como Firefox o Opera. Realmente ayudan a
los usuarios a ahorrar tiempo mientras navegan por el Interent. Los gestos del ratn se crean con
Mtodos posibles
SetWobbleTolerance(integer wobbletolerance)
Establece la intensidad para desencadenar un
gesto
SetModifiers(list modifiers)
Toma una lista de constantes wx.Key (Control,
Mays y / o Alt)
SetMouseButton(integer flag)
Toma la constante wx para el mousebutton
objetivo
Gestos disponibles:
L para izquierda
R para la derecha
U para arriba
D para abajo
7 para el noroeste
9 para el noreste
1 para el sudoeste
3 para el sureste
Si usted se pregunta por qu estos nmeros fueron elegidos, echar un vistazo a la almohadilla numrica. Los
gestos del ratn pueden combinarse. De esta manera 'RDLU' es un gesto del ratn activado, cuando hacemos
un cuadrado con un puntero del ratn.
wx.MOUSE_BTN_LEFT
wx.MOUSE_BTN_MIDDLE
Wx.MOUSE_BTN_RIGHT
#!/usr/bin/python
# mousegestures.py
import wx
import wx.lib.gestures as gest
class MyMouseGestures(wx.Frame):
def __init__ (self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(600, 500))
def OnDownRight(self):
self.Close()
class MyApp(wx.App):
def OnInit(self):
frame = MyMouseGestures(None, -1, "mousegestures.py")
frame.Show(True)
frame.Centre()
return True
app = MyApp(0)
app.MainLoop()