
Hola. En este post vamos a ver cómo se utiliza el
CustomControl de
wxFormBuilder para generar código
wxPython. El widget
CustomControl se puede encontrar en la pestaña
Additional del
Component Pallete.

De lo que se trata es de generar código
Python, mediante el framework
wxPython, para un widget que todavía no está soportado en
wxFormBuilder. Se utiliza un
wx.Panel para visualizar donde se colocará este widget.
Para ver cómo funciona este widget vamos a crear un proyecto en
wxFormBuilder, en el cual queremos insertar un widget
wx.CollapsiblePane, el cual no está soportado actualmente (en la versión 3.1.70) por
wxFormBuilder.
Lo primero de todo es crear un proyecto. Después incluiremos una serie de widgets, tal como refleja el siguiente árbol de objetos de
wxFormBuilder:

Como se puede observar se incluye el
CustomControl en un sizer dentro de un
wx.Panel (MyPanel1). Además se ha creado un
wx.Frame para probar más tarde que efectivamente funciona y otro
wx.Panel (MyPanel2) que contiene un texto y una imagen, para ver el funcionamiento del widget
CollapsiblePane. El siguiente paso es configurar las propiedades del
CustomControl, modificándolas en
Properties del
Object Properties:

Para generar código
Python de estas propiedades solamente nos interesan 2, a saber:
name (el nombre del widget, que se utiliza para añadirlo al sizer) y
construction (la llamada para instanciar la clase y crear el objeto cuyo nombre ha sido declarado en name, y que tiene que ser atributo de la clase). Por tanto vamos a darle a nuestro nuevo widget como
name CollapsiblePanel. Y el
construction será:
self.CollapsiblePanel = wx.CollapsiblePane(self, label='Detalle'). Darse cuenta que el
CollapsiblePanel tiene que ser atributo de la clase generada (es por ello lo del
self).


Si nos vamos a la pestaña del código
Python generado nos encontramos:

El código para probar las clases generadas por
wxFormBuilder podría ser el siguiente:
import wx
# Importamos las clases generadas por wxFormBuilder.
from nuevoWidget import MyFrame1, MyPanel1, MyPanel2
# Construimos clase que hereda de los componentes gráficos.
class frame_ejemplo(MyFrame1):
def __init__(self):
# Llamamos al constructor de MyFrame1.
MyFrame1.__init__(self, None)
# Añadimos al Frame el panel MyPanel1.
self.panel = p = MyPanel1(self)
# Obtenemos el ID del panel CollasiblePane.
pane = p.CollapsiblePanel.GetPane()
# Le decimos a MyPanel2 que será hijo del panel CollapsiblePane.
self.panel2 = MyPanel2(pane)
# Lanzamos aplicación.
aplicacion = wx.PySimpleApp()
frame = frame_ejemplo()
frame.Show()
aplicacion.MainLoop()
Y con el siguiente resultado:

Si hacemos click en el botón
Detalle:

Saludos.
no me aparece la opcion
ResponderEliminarcode_generation: python
:(