def cargar_vehiculo(self, id_vehiculo = None): """Administra las filas de la tabla autos. Si el parámetro id_vehiculo es None, se trabajará con todos las autos, de lo contrario, el método mismo, buscará los autos necesarias. """ productos = [] if id_vehiculo==None: productos = controlador('obtener autos', None) else: for i in id_vehiculo: #print controlador('obtener auto', i)[0] productos.append(controlador('obtener auto', i)[0]) self.ui.tabla_ve.clear() self.set_headers() self.ui.tabla_ve.setRowCount(len(productos)) r = 0 for row in productos: tipo = controlador('obtener tipo', [row[3]])[0][0] marca = controlador('obtener marca', [row[2]])[0][1] item = QtGui.QTableWidgetItem(str(row[0])) self.ui.tabla_ve.setItem(r,0,item) item = QtGui.QTableWidgetItem(row[1]) self.ui.tabla_ve.setItem(r,1,item) item = QtGui.QTableWidgetItem(marca) self.ui.tabla_ve.setItem(r,2,item) item = QtGui.QTableWidgetItem(str(row[10])) self.ui.tabla_ve.setItem(r,3,item) item = QtGui.QTableWidgetItem(tipo) self.ui.tabla_ve.setItem(r,4,item) r = r+1 self.ui.tabla_ve.setColumnHidden(0,True)
def cargar_marca(self, id_marca = None): """Administra las filas de la tabla marcas. Si el parámetro id_marca es None, se trabajará con todas las marcas, de lo contrario, el método mismo, buscará las marcas necesarias. """ marcas = [] if id_marca==None: marcas = controlador('obtener marcas', None) else: for i in id_marca: marcas.append(controlador('obtener marca', i)[0]) self.ui.tabla_ma.clear() self.set_headers() self.ui.tabla_ma.setRowCount(len(marcas)) r = 0 for row in marcas: num_autos = controlador('contar autos', [row[0]])[0][0] item = QtGui.QTableWidgetItem(str(row[0])) self.ui.tabla_ma.setItem(r,0,item) item = QtGui.QTableWidgetItem(row[1]) self.ui.tabla_ma.setItem(r,1,item) item = QtGui.QTableWidgetItem(row[2]) self.ui.tabla_ma.setItem(r,2,item) item = QtGui.QTableWidgetItem(str(num_autos)) self.ui.tabla_ma.setItem(r,3,item) r = r+1 self.ui.tabla_ma.setColumnHidden(0,True)
def muestra_imagen(self, row, column): """Responde cuando se hace doble click en alguna celda de la tabla autos, desplagando en un QDialog la image del auto de la fila donde se encuentra la celda clickeada""" id_vehiculo = self.ui.tabla_ve.item(row, 0).text() vehiculo = controlador('obtener auto', id_vehiculo)[0] ruta = os.path.join(self.dir, vehiculo[9]) map=QtGui.QPixmap(ruta) if map.isNull() == False: msgBox = QtGui.QDialog() #layoutWidget = QtGui.QWidget(msgBox) #layoutWidget.setGeometry(QtCore.QRect(10, 10, 400, 600)) graphicsView = QtGui.QGraphicsView(msgBox) height = 580 width = int(map.rect().height()*height/map.rect().width()) msgBox.resize(height, width) #graphicsView.resize(height, width) scene = QtGui.QGraphicsScene(graphicsView) map=map.scaled(height-2, width-2) #msgBox.setIconPixmap(map) scene.addPixmap(map) graphicsView.setScene(scene) marca = controlador('obtener marca', [vehiculo[2]])[0] tipo = controlador('obtener tipo', [vehiculo[3]])[0] texto = "Modelo:\t"+vehiculo[1]+"\nMarca:\t"+marca[1] #texto = texto+"\nTipo:\t"+tipo[0] msgBox.setWindowTitle(marca[1]+" "+vehiculo[1]) #msgBox.setDetailedText(texto) else: msgBox = QtGui.QMessageBox() msgBox.setWindowTitle('Visor de Imagen') msgBox.setIcon(QtGui.QMessageBox.Information) msgBox.setText("No se pudo cargar la imagen.") msgBox.exec_()
def nuevo_ma(self): """Muestra un QDialog en respuesta al boton 'Nueva Marca' de la pestaña Marcas, en el cual aparecen los campos de texto necesarios para ingresar una nueva marca.""" dialog_marca = FormMarca(self, "Nuevo") if dialog_marca.result: controlador('añadir marca', dialog_marca.marca) self.cargar_marca()
def eliminar_ve(self): """Se ejecuta cuando se presiona el boton 'Eliminar Auto' en la pestaña de autos cuando se ha seleccionado uno o más elementos de la tabla. Se Abre un QDialog que muestra la cantidad de filas seleccionadas que busca confirmar la desición de elimiar el o los autos seleccionados en la tabla.""" sel_itms = self.ui.tabla_ve.selectedItems() n_filas = (len(sel_itms))/(self.ui.tabla_ve.columnCount()-1) msgBox = QtGui.QMessageBox() msgBox.setWindowTitle('Eliminar Vehiculo(s)') msgBox.setIcon(QtGui.QMessageBox.Warning) msgBox.setText("Se ha(n) seleccionado "+str(n_filas)+" vehiculo(s).") msgBox.setInformativeText("Seguro que quiere eliminar?") msgBox.setStandardButtons(QtGui.QMessageBox.Save | QtGui.QMessageBox.Cancel) msgBox.setDefaultButton(QtGui.QMessageBox.Save) ret = msgBox.exec_() if ret == QtGui.QMessageBox.Save: vehiculo = [] for fila in range(n_filas) : row = self.ui.tabla_ve.row(sel_itms[fila]) vehiculo.append(self.ui.tabla_ve.item(row, 0).text()) for auto in vehiculo: controlador('eliminar auto', auto) elif ret == QtGui.QMessageBox.Cancel: pass else: print "Error" self.cargar_vehiculo()
def nuevo_tipo(self): """Verifica si el tipo ingresado por el usuario ya existia o no, en el caso que no exista """ dialog_tipo = FormTipo(self, "Nuevo") if dialog_tipo.result: controlador('añadir tipo', dialog_tipo.tipo) self.ui.cb_tipo.clear() tipos = controlador('obtener tipos', None) for tipo in tipos: self.ui.cb_tipo.addItem(tipo[1], tipo[0])
def nuevo_ve(self): """Muestra un QDialog en respuesta al boton 'Nuevo Auto' de la pestaña Autos, en el cual aparecen los campos de texto necesarios para ingresar un nuevo auto, mostrando con QComboBox las marcas y tipos existentes, permitiendo agregar una nueva marca o un nuevo tipo. Tambien permite buscar la imagen del auto mediante un explorador de carpetas.""" dialog_vehiculo = FormVehiculo(self, 'Nuevo') if dialog_vehiculo.result: controlador('añadir auto', dialog_vehiculo.vehiculo) self.cargar_vehiculo()
def nuevo_marca(self): """Verifica si la marca ya existe en la base de datos, si resulta no existir en la base de datos, esta es agregada """ dialog_marca = FormMarca(self, "Nuevo") if dialog_marca.result: controlador('añadir marca', dialog_marca.marca) self.ui.cb_marca.clear() marcas = controlador('obtener marcas', None) for marca in marcas: self.ui.cb_marca.addItem(marca[1], marca[0])
def editar_ma(self): """Se ejecuta cuando se presiona el boton 'Editar Marca' de la pestaña Marcas, solo si se han seleccionado elementos en la tabla. Muestra un QDialog con los campos de texto necesarios para que se acutualicen los datos de la marca, esto por cada elemento seleccionado.""" sel_itms = self.ui.tabla_ma.selectedItems() n_filas = (len(sel_itms)+1)/(self.ui.tabla_ma.columnCount()-1) for fila in range(n_filas) : row = self.ui.tabla_ma.row(sel_itms[fila]) id_marca = self.ui.tabla_ma.item(row, 0).text() self.marcas = controlador('obtener marca', [id_marca])[0] dialog_marca = FormMarca(self, "Editar") if dialog_marca.result: dialog_marca.marca.append(id_marca) controlador('editar marca', dialog_marca.marca) self.cargar_marca()
def editar_ve(self): """Se ejecuta cuando se presiona el boton 'Editar Auto' de la pestaña Autos, solo si se han seleccionado elementos en la tabla. Muestra un QDialog con los campos de texto necesarios para que se acutualicen los datos del auto, esto por cada elemento seleccionado.""" sel_itms = self.ui.tabla_ve.selectedItems() n_filas = len(sel_itms)/(self.ui.tabla_ve.columnCount()-1) for fila in range(n_filas) : row = self.ui.tabla_ve.row(sel_itms[fila]) id_vehiculo = self.ui.tabla_ve.item(row, 0).text() self.vehiculos = controlador('obtener auto', id_vehiculo)[0] dialog_vehiculo = FormVehiculo(self, "Editar") if dialog_vehiculo.result: dialog_vehiculo.vehiculo.append(id_vehiculo) controlador('editar auto', dialog_vehiculo.vehiculo) self.cargar_vehiculo()
def cargar_marca_por_busqueda(self): """Responde a la edicion de texto en el campo de busqueda de la pestaña donde se muestra la tabla de marcas, desplagando en la misma las filas que contengan campos que coincidan con el texto que se haya ingresado.""" texto = self.ui.le_filtro_ma.text() id_marca = controlador('buscar marca', texto) self.cargar_marca(id_marca)
def eliminar_ma(self): """Se ejecuta cuando se presiona el boton 'Eliminar en la pestaña de marcas cuando se ha seleccionado uno o más elementos de la tabla. Se Abre un QDialog que muestra la cantidad de filas seleccionadas que busca confirmar la desición de elimiar la o las marcas seleccionadas en la tabla. Si existen autos de esa marca, el proceso se interrumpe informando la cantidad de autos asiciados a cada marca que no se pudo eliminar.""" sel_itms = self.ui.tabla_ma.selectedItems() n_filas = (len(sel_itms))/(self.ui.tabla_ma.columnCount()-1) msgBox = QtGui.QMessageBox() msgBox.setWindowTitle('Eliminar Marca(s)') msgBox.setIcon(QtGui.QMessageBox.Warning) msgBox.setText("Se ha(n) seleccionado "+str(n_filas)+" marca(s).") msgBox.setInformativeText("Seguro que quiere eliminar?") msgBox.setStandardButtons(QtGui.QMessageBox.Save | QtGui.QMessageBox.Cancel) msgBox.setDefaultButton(QtGui.QMessageBox.Save) ret = msgBox.exec_() if ret == QtGui.QMessageBox.Save: # Save was clicked marca = [] for fila in range(n_filas): row = self.ui.tabla_ma.row(sel_itms[fila]) id_marca = self.ui.tabla_ma.item(row, 0).text() num = controlador('contar autos', [id_marca])[0][0] if num == 0: marca.append(id_marca) else: msgBox = QtGui.QMessageBox() msgBox.setWindowTitle('Eliminar Marca') msgBox.setIcon(QtGui.QMessageBox.Information) msgBox.setText("No se pudo eliminar la marca: "+ self.ui.tabla_ma.item(row, 1).text()+".") msgBox.setInformativeText("La marca tiene: "+str(num) +" vehiculo(s) asociado(s)") msgBox.exec_() for x in marca: controlador('eliminar marca', x) elif ret == QtGui.QMessageBox.Cancel: # cancel was clicked pass else: print "Error" self.cargar_marca() self.cargar_vehiculo()
def cargar_vehiculo_por_busqueda(self): """Responde a la edicion de texto en el campo de busqueda de la pestaña donde se muestra la tabla de autoss, desplagando en la misma las filas que contengan campos que coincidan con el texto que se haya ingresado.""" texto = self.ui.le_filtro_ve.text() if not texto=="": id_vehiculo = controlador('buscar auto', texto) self.cargar_vehiculo(id_vehiculo) else: self.cargar_vehiculo()
def __init__(self, parent=None, trigger=None): QtGui.QDialog.__init__(self, parent) self.parent = parent self.trigger = trigger self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.le_peso.setValidator(QtGui.QDoubleValidator()) self.ui.le_rendimiento.setValidator(QtGui.QIntValidator()) marcas = controlador('obtener marcas', None) for marca in marcas: self.ui.cb_marca.addItem(marca[1], marca[0]) print marca[0] tipos = controlador('obtener tipos', None) for tipo in tipos: self.ui.cb_tipo.addItem(tipo[1], tipo[0]) if(trigger == "Nuevo"): self.ui.btn_ok.setEnabled(False) if(trigger == "Editar"): self.ui.le_modelo.setText(parent.vehiculos[1]) self.ui.le_color.setText(parent.vehiculos[4]) self.ui.le_motor.setText(str(parent.vehiculos[5])) self.ui.le_peso.setText(str(parent.vehiculos[6])) self.ui.le_descripcion.setText(parent.vehiculos[7]) self.ui.le_rendimiento.setText(str(parent.vehiculos[8])) self.ui.sb_fecha.setValue(self.ui.sb_fecha.valueFromText(str(parent.vehiculos[10]))) print parent.vehiculos[2] print self.ui.cb_marca.findData(parent.vehiculos[2]) self.ui.cb_marca.setCurrentIndex(self.ui.cb_marca.findData(parent.vehiculos[2])) self.ui.cb_tipo.setCurrentIndex(self.ui.cb_tipo.findData(parent.vehiculos[3])) ruta = os.path.join(parent.dir, parent.vehiculos[9]) self.ui.le_imagen.setText(ruta) scene = QtGui.QGraphicsScene(self) map=QtGui.QPixmap(ruta) if map.isNull() == False: width = 170 height = int(map.rect().width()*width/map.rect().height()) map=map.scaled(height, width) scene.addPixmap(map) self.ui.graphicsView.setScene(scene) else: msgBox = QtGui.QMessageBox() msgBox.setWindowTitle('Error al cargar') msgBox.setIcon(QtGui.QMessageBox.Information) msgBox.setText("No se pudo cargar la imagen.") msgBox.exec_() self.ui.btn_ok.setEnabled(False) self.ui.btn_cancel.clicked.connect(self.cancel) self.ui.btn_ok.clicked.connect(self.ok) self.ui.btn_marca.clicked.connect(self.nuevo_marca) self.ui.btn_tipo.clicked.connect(self.nuevo_tipo) self.ui.btn_agregar.clicked.connect(self.nuevo_imagen) self.show() self.parent.setEnabled(False) self.setEnabled(True) self.exec_()