Mario’s Player Parte II

En la entrada anterior, vimos una pincelada de SQLite: Creación de tablas e ingreso de información.

Ahora vamos a ingresar información, desde Python en una bonita ventana.

Algo tan simple como esto:

Ventanita de este Tuto

A todo esto, lo estoy haciendo con Eric (Aquí un miniEjemplo) Pueden descargar el .ui desde aquí. Y de la ventana, voy a ocupar el evento released de los 3 botones: btn_AddCancion, btn_AddLista y btnBuscar. Quedando algo así (archivo VentanaSQLite.py)

# -*- coding: utf-8 -*-

"""
Module implementing MainWindow.
"""

from PyQt4.QtGui import QMainWindow
from PyQt4.QtCore import pyqtSignature

from Ui_VentanaSQLite import Ui_MainWindow

class MainWindow(QMainWindow, Ui_MainWindow):
    """
    Class documentation goes here.
    """
    def __init__(self, parent = None):
        """
        Constructor
        """
        QMainWindow.__init__(self, parent)
        self.setupUi(self)

    @pyqtSignature("")
    def on_btnAddLista_released(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        raise NotImplementedError

    @pyqtSignature("")
    def on_btnBuscar_released(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        raise NotImplementedError

    @pyqtSignature("")
    def on_btnAddCancion_released(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        raise NotImplementedError 

Entonces, cómo funciona esto:

  1. Ingresamos el nombre de la canción y la guardamos en la BD con el botón Nueva Lista.
  2. Ingresamos el nombre de la canción, la Lista a la que pertenece (obviamente tenemos que agregar la lista primero, si no el comboBox no se llena).
  3. Le damos al botón Buscar y … buscamos la canción.
  4. Guardamos la canción en la BD con el botón Nueva Canción.

Creamos una nuevo archivo sqlite.py para probar qué tal va la cosa con la BD (yo sigo en Eric, pero si lo quieren hacer con Kwrite u otro, es cosa suya xD). La BD es la misma que creé en el post anterior.

Agregamos lo siguiente:

# -*- coding: utf-8 -*-
import sqlite3

conn = sqlite3.connect('../bd/bdPlayer.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM listas')
for row in cursor.fetchall():
    print "ID de lista: ",  row[0],  "Nombre lista: ",  row[1]
conn.close()

Recordar que es muuuuy importante la identación en python. Del código no hay mucho que decir… solo tienen que cambiar la ruta de la bd.

Como resultado, tuve lo siguiente: ID de lista: 1 Nombre lista: Lista1 Funciona🙂 Ahora siguiendo con el tuto, lo vamos a hacer más bonito, implementando una Clase (archivo sqlite.py)con sus respectivos métodos (creamos un paquete nuevo con el nombre de clases (original no? xD).

import sqlite3

class SQLite:
    def __init__(self):
        """ Constructor """
        try:
            self.conn = sqlite3.connect('bd/bdPlayer.db')
        except sqlite3.Error,  e:
            print "Error al abrir BD:",  e.args[0]
            print "Terminando Aplicacion"
            quit()

    def setLista(self, nombre):
        return self.__NuevaLista(nombre)

    def __NuevaLista(self,  nombre):
        n =(str(nombre), )
        try:
            cursor = self.conn.cursor()
            cursor.execute('INSERT INTO listas (lis_nombre) VALUES(?)', n)
            self.conn.commit()
            cursor.close()
            return 1
        except sqlite3.Error,  e:
            print "Error al guardar Lista:", e.args[0], n
            return 0
        self.conn.close()

Y tenemos para agregar una nueva lista. Se supone que, cuando le demos al botón btnAddLista vamos a ingresarla en la bd.

Vamos entonces al archivo VentanaSQLite.py que se encuentra bajo la carpeta ui y le agregamos esto:

import sys
sys.path.append('./clases')
from sqlite import SQLite

Esto es para agregar la clase a nuestra VentanaSQLite.py ya que sqlite.py se encuentra en otro directorio, a la misma altura que ui.

Ahora bajamos hasta el evento on_btnAddLista_released() y lo editamos para mandarle el nombre de la lista a la instancia de SQLite. Si nos devuelve un 1, actualizamos el comboBox. Si no… ps no se ingreso nada😦

objSQLite = SQLite()
        if (objSQLite.setLista(self.txtNomLista.text())):
            #Si pudimos guardar la nueva lista, actualizamos el combobox. Pero primero obtenemos las listas
            listas = objSQLite.getListas()
            if(listas != 0):
                #recorremos listas para agregarlas al combobox. Pero primero, lo vaciamos
                self.comboBox.clear()
                #Ahora recorremos listas (que es una una lista de listas en python
                for list in listas:
                    self.comboBox.addItem(str(list[1]), int(list[0]))
            else:
                print "Error al obtener listas"
        else:
            print "Error al guardar Lista"
            

Y eso sería todo

Final

Mañana sigo con la parte de las canciones (con otra interfaz). Cuelgo los archivos en PasteBin, y en físico en mi DropBox🙂

PasteBin: sqlite.py VentanaSQLite.py

DropBox bd eListView.py sqlite.py Ui_VentanaSQLite.py VentanaSQLite.py VentanaSQLite.ui

Acerca de MaritoCares

Ingeniero Informático. Con tendencias a la programación en [C#, VB].NET, Java(Web principalmente...), PHP, JavaScript, algo mínimo de [ruby, python], y el clásico C.
Esta entrada fue publicada en Aplicación, Python, SQLite. Guarda el enlace permanente.

11 respuestas a Mario’s Player Parte II

  1. Hiram dijo:

    exito con eso mario

  2. linexteria dijo:

    de donde sacaste un manual de pyqt o donde aprendiste, ¡¿algún tutorial? o web?

    saludos y estamos al tanto de las actualizaciones..

  3. MaritoCares dijo:

    A todo esto, colgué la bd y la clase SQLite.py.
    Tanto la bd como la clase puedes usarlas independiente de la gui, así que no debería ser tan complicado moverlo de qt a gtk

  4. Yoyo dijo:

    Que envidia me dás, cumpa….

    Yo solo se manejar mi tractor… siempre he sido y soy un user doméstico de Linux, pero me encanta este tu proyecto😉

    Muchos ánimos desde Iberia🙂

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s