def __init__(self, parent=None, id_compra=None):
     QtGui.QDialog.__init__(self, parent)
     self.ui = Ui_Productos()
     self.ui.setupUi(self)
     self.load_productos()
     self.guardar_id(id_compra)
     self.set_signals()
     self.show()
class Form(QtGui.QDialog):
    def __init__(self, parent=None, id_compra=None):
        QtGui.QDialog.__init__(self, parent)
        self.ui = Ui_Productos()
        self.ui.setupUi(self)
        self.load_productos()
        self.guardar_id(id_compra)
        self.set_signals()
        self.show()

    table_columns = (
    (u"Codigo", 200),
    (u"Nombre", 100),
    (u"Descripción", 200),
    (u"Marca", 100),
    (u"Color", 75))

    def guardar_id(self, id_compra):
        self.id_compra = id_compra


    def set_signals(self):
        self.ui.btn_agregar.clicked.connect(self.agregar)
        self.ui.btn_cancelar.clicked.connect(self.cancelar)
        self.ui.btn_nuevo.clicked.connect(self.nuevo)
        self.ui.btn_finalizar.clicked.connect(self.finalizar)
        self.ui.btn_detalle.clicked.connect(self.detalle)

    def detalle(self):
        form = view_compra_realizada.Form(self, self.id_compra)
        form.rejected.connect(self.load_productos)
        form.exec_()

    def finalizar(self):
        self.reject()

    def nuevo(self):
        form = view_vent_ingreso_producto.Form()
        form.rejected.connect(self.load_productos)
        form.exec_()

    def cancelar(self):
        self.reject()

    def agregar(self):
        model = self.ui.table_productos.model()
        index = self.ui.table_productos.currentIndex()
        if index.row() == -1:  # No se ha seleccionado una fila
            self.errorMessageDialog = QtGui.QErrorMessage(self)
            self.errorMessageDialog.showMessage("Debe seleccionar una fila")
            return False
        else:
            id_producto = model.item(index.row()).pk
            cod = model.item(index.row()).prod[1]
            nom = model.item(index.row()).prod[2]
            des = model.item(index.row()).prod[3]
            mar = model.item(index.row()).prod[4]
            col = model.item(index.row()).prod[5]
            form = view_detalle.Form(self, self.id_compra, id_producto)
            form.rejected.connect(self.load_productos)
            form.exec_()
            self.load_productos()


    def load_productos(self):
        # Método que carga la tabla productos en la Ventana.
        productos = Producto.all()
        rows = len(productos)
        model = QtGui.QStandardItemModel(
            rows, len(self.table_columns))
        self.ui.table_productos.setModel(model)
        self.ui.table_productos.horizontalHeader().setResizeMode(
            0, self.ui.table_productos.horizontalHeader().Stretch)

        for col, h in enumerate(self.table_columns):
            model.setHeaderData(col, QtCore.Qt.Horizontal, h[0])
            self.ui.table_productos.setColumnWidth(col, h[1])

        for i, data in enumerate(productos):
            row = [data[1], data[2], data[3], data[4], data[5]]
            for j, field in enumerate(row):
                index = model.index(i, j, QtCore.QModelIndex())
                model.setData(index, field)
            #Parametros ocultos
            model.item(i).prod = data
            model.item(i).pk = data[0]