Mostrando las entradas con la etiqueta INTERFAZ GRAFICA. Mostrar todas las entradas
Mostrando las entradas con la etiqueta INTERFAZ GRAFICA. Mostrar todas las entradas

sábado, 15 de septiembre de 2018

¿Cómo crear una ventana en Python con wxPython?




#!/usr/bin/env python
# -*- coding: utf-8 -*-


# Importamos la librería gráfica wxPython.
import wx


# Nuestra clase que hereda de wx.Frame y que representará la ventana.
class MyFrame(wx.Frame):

    # Función donde se inicializa, donde se crean o se declaran los
    # miembros (variables) de la clase.
    def __init__(self, parent, id, title):
        # Inicializamos la clase wx.Frame de la cual heredará esta.
        wx.Frame.__init__(self, parent, id, title)
        # Creamos una lista de elementos a mostrar.
        self.listbox_1 = wx.ListBox(self, -1)
        # Creamos 2 botones.
        self.button_1 = wx.Button(self, -1, u"Click aquí")
        self.button_2 = wx.Button(self, -1, u"Cerrar")
        # Llmamos otros métodos que creamos para la inicialización.
        self.__do_layout()
        self.__set_properties()
        self.__set_event()
    

    # Esta función ordenará los elementos de nuestra ventana,
    # mediante el uso de sizers.
    def __do_layout(self):
        # Creamos los sizers de tipo BoxSizer donde los elementos se
        # irán incluyendo de manera vertical y horizontalmente.
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
        # Incluímos los elementos en los sizers mediante su método Add,
        # con los siguientes argumentos:
        #    1. Nombre del elemento a agregar (variable)
        #    2. Proporción que ocupará el elemento dentro del sizer.
        #    3. Margenes que tendrá el elemento: wx.ALL = Todos.
        #    4. Espacio de los margenes.
        sizer_1.Add(self.listbox_1, 1, wx.EXPAND|wx.ALL, 5)
        sizer_2.Add(self.button_1, 0, wx.ALL, 5)
        sizer_2.Add(self.button_2, 0, wx.ALL, 5)
        sizer_1.Add(sizer_2, 0, wx.ALL, 5)
        # Establecemos el sizer principal a la ventana.
        self.SetSizer(sizer_1)
        self.Layout()
    
    # Esta función establecerá las propiedades a los elementos.
    def __set_properties(self):
        # Tamaño de la ventana.
        self.SetSize( (800, 600) )
        # Color de fondo de uno de los miembros (elementos)
        self.button_1.SetBackgroundColour( wx.Colour(200, 255, 100) )
        # Fuente del texto del listbox_1.
        self.listbox_1.SetFont( wx.Font(24, wx.DEFAULT, wx.NORMAL, wx.NORMAL) )

    # Esta función establecerá los diferentes eventos a los elementos.
    def __set_event(self):
        self.Bind(wx.EVT_BUTTON, self.OnButton1, self.button_1)
        self.Bind(wx.EVT_BUTTON, self.OnButton2, self.button_2)
    
    # Función al precionar el button_1
    def OnButton1(self, event):
        # Agregamos un texto al listbox_1.
        self.listbox_1.Append(u"Precionado")
        event.Skip()
    
    # Función al preccionar el button_2
    def OnButton2(self, event):
        self.Close()
        event.Skip()
    
    

# Instaciamos la clase App donde se ejecutará nuestra ventana.
app = wx.App(0)
# Instanciamos la clase MyFrame que representa nuestra ventana.
frame = MyFrame(None, -1, "Hola Mundo")
# Mostramos la ventana.
frame.Show()
# Esto crea una especie de bucle mientras nuestra ventana este abierta.
app.MainLoop()