Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
llenar QcomboBox desde mysql
#1
Hola nuevamente, tengo otra consulta, tal como lo indica el titulo, necesito llenar el combobox a partir de una tabla en mysql,  asta ahora lo venia haciendo en un tableWidget:
Código:
#...
for i, (id, articulo, cantidad, talle, color, costo, ganancia, precio) in enumerate (DatosBase):
                self.productos_table_widget.setRowCount(row+1)
                self.productos_table_widget.setItem(i, 0, QTableWidgetItem(str(id)))
                self.productos_table_widget.setItem(i, 1, QTableWidgetItem(str(articulo)))
                self.productos_table_widget.setItem(i, 2, QTableWidgetItem(str(cantidad)))
                self.productos_table_widget.setItem(i, 3, QTableWidgetItem(str(talle)))
                self.productos_table_widget.setItem(i, 4, QTableWidgetItem(str(color)))
                self.productos_table_widget.setItem(i, 5, QTableWidgetItem(str(costo)))
                self.productos_table_widget.setItem(i, 6, QTableWidgetItem(str(ganancia)))
                self.productos_table_widget.setItem(i, 7, QTableWidgetItem(str(precio)))
#...
los combo color y talle los predefini en qtdesigner pero la idea es cargarlos manualmente en otra ventana, despues vere como tomar los datos de dos tablas y mandarlos a la ventana principall, por el momento quede trabado en esto probe algunos ejemplos pero no doy con la solucion....
Responder
#2
Hola, ¿cuál es el error que estás obteniendo? En principio lo veo bien el código.

Acá tenés un ejemplo de un visor de SQLite usando PyQt. La lógica es bastante similar: https://recursospython.com/codigos-de-fu...lite-pyqt/.

Saludos
Responder
#3
(27-11-2021, 11:35 PM)Francisco escribió: Hola, ¿cuál es el error que estás obteniendo? En principio lo veo bien el código.

Acá tenés un ejemplo de un visor de SQLite usando PyQt. La lógica es bastante similar: https://recursospython.com/codigos-de-fu...lite-pyqt/.

Saludos

ese codigo esta bien, mi duda es como seria si en ves de llenar un table widget fuera un combobox intente entre otras cosas de hacerlo asi:
Código:
for i, (color) in enumerate (dataColor):
                self.combo_color.currentIndex(ind+1)
                self.combo_color.setItemText(i, 0, QComboBox(str(color)))
                ind +=1

arroja el error: TypeError: QComboBox.currentIndex() takes no arguments (1 given).


y si lo jhago asi:
Código:
for i, color in (dataColor):
               
                self.combo_color.setItemText, color
               
                i +=1
ValueError: not enough values to unpack (expected 2, got 1).

 probe otras cosas vasado en ejemplos que fui encontrando pero fueron peores los errores, y no encuentro en la documentacion de qt nada que me ayude o no lo psupe entender.
Responder
#4
Ah, bien, no había registrado que se trataba de un QComboBox. Acá tenés un ejemplo:

  1. import sys
  2. from PySide6.QtCore import Qt
  3. from PySide6.QtWidgets import QApplication, QComboBox, QLabel, QMainWindow
  4.  
  5.  
  6. class MainWindow(QMainWindow):
  7.  
  8. def __init__(self, *args, **kwargs):
  9. super().__init__(*args, **kwargs)
  10. self.resize(400, 300)
  11. self.combo = QComboBox(self)
  12. self.combo.setGeometry(50, 50, 200, 25)
  13. elements = ["Elemento 1", "Elemento 2", "Elemento 3"]
  14. for i, element in enumerate(elements):
  15. self.combo.insertItem(i, element)
  16.  
  17.  
  18. if __name__ == "__main__":
  19. app = QApplication(sys.argv)
  20. main_window = MainWindow()
  21. main_window.show()
  22. sys.exit(app.exec_())


Básicamente la clave está en insertItem(), que toma dos argumentos, el primero la posición y el segundo el elemento mismo como una cadena. También podrías usar insertItems() (nótese la "s" al final) que soporta pasar una lista como segundo elemento, pudiendo evitar el bucle.

En tu caso deberías usar algo así (si solo querés mostrar el color):

  1. for i, (id, articulo, cantidad, talle, color, costo, ganancia, precio) in enumerate (DatosBase):
  2. self.combo_color.insertItem(i, color) # Suponiendo que color es una cadena.


Saludos
Responder
#5
(28-11-2021, 02:20 PM)Francisco escribió: Ah, bien, no había registrado que se trataba de un QComboBox. Acá tenés un ejemplo:

  1. import sys
  2. from PySide6.QtCore import Qt
  3. from PySide6.QtWidgets import QApplication, QComboBox, QLabel, QMainWindow                                 
  4.  
  5.  
  6. class MainWindow(QMainWindow):
  7.  
  8.     def __init__(self, *args, **kwargs):
  9.         super().__init__(*args, **kwargs)
  10.         self.resize(400, 300)
  11.         self.combo = QComboBox(self)
  12.         self.combo.setGeometry(50, 50, 200, 25)
  13.         elements = ["Elemento 1", "Elemento 2", "Elemento 3"]
  14.         for i, element in enumerate(elements):
  15.             self.combo.insertItem(i, element)
  16.  
  17.  
  18. if __name__ == "__main__":
  19.     app = QApplication(sys.argv)
  20.     main_window = MainWindow()
  21.     main_window.show()
  22.     sys.exit(app.exec_())


Básicamente la clave está en insertItem(), que toma dos argumentos, el primero la posición y el segundo el elemento mismo como una cadena. También podrías usar insertItems() (nótese la "s" al final) que soporta pasar una lista como segundo elemento, pudiendo evitar el bucle.

En tu caso deberías usar algo así (si solo querés mostrar el color):

  1. for i, (id, articulo, cantidad, talle, color, costo, ganancia, precio) in enumerate (DatosBase):
  2.     self.combo_color.insertItem(i, color)  # Suponiendo que color es una cadena.


Saludos

el inserIitem lo habia pasado por alto porque pense que solo era para agrear items al combo pero no lo relacione con la carga de datos desde DB, lo unico que le cambie al codigo que me enviaste fue  declarar como strin la variable color al momento de  insertar en el combo porque me tirarba error sino.
Código:
self.combo_color.insertItem(i,  str(color))
empese hace poco a estudiar python y ya es un vicio jaja, abrazoooo... y mil gracias...

editado:
 para los principiantes como yo, en el combo si en ves de [color] ponen (color) la salida en lugar de ser: texto se vera como: ('texto'),
Código:
for i, [color] in enumerate (dataColor):
                             
                self.combo_color.insertItem(i, str(color))
Responder
#6
¡Excelente! Saludos Smile
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)