Mensajes: 17
Temas: 6
Registro en: Nov 2021
Reputación:
0
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....
Mensajes: 1.306
Temas: 3
Registro en: Feb 2016
Reputación:
71
27-11-2021, 11:35 PM
(Última modificación: 27-11-2021, 11:35 PM por Francisco.)
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
Mensajes: 17
Temas: 6
Registro en: Nov 2021
Reputación:
0
(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.
Mensajes: 1.306
Temas: 3
Registro en: Feb 2016
Reputación:
71
28-11-2021, 02:20 PM
(Última modificación: 28-11-2021, 02:21 PM por Francisco.)
Ah, bien, no había registrado que se trataba de un QComboBox. Acá tenés un ejemplo:
Código: import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QComboBox, QLabel, QMainWindow
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.resize(400, 300)
self.combo = QComboBox(self)
self.combo.setGeometry(50, 50, 200, 25)
elements = ["Elemento 1", "Elemento 2", "Elemento 3"]
for i, element in enumerate(elements):
self.combo.insertItem(i, element)
if __name__ == "__main__":
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
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):
Código: for i, (id, articulo, cantidad, talle, color, costo, ganancia, precio) in enumerate (DatosBase):
self.combo_color.insertItem(i, color) # Suponiendo que color es una cadena.
Saludos
Mensajes: 17
Temas: 6
Registro en: Nov 2021
Reputación:
0
28-11-2021, 05:26 PM
(Última modificación: 28-11-2021, 07:12 PM por ende78ar.)
(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:
Código: import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QComboBox, QLabel, QMainWindow
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.resize(400, 300)
self.combo = QComboBox(self)
self.combo.setGeometry(50, 50, 200, 25)
elements = ["Elemento 1", "Elemento 2", "Elemento 3"]
for i, element in enumerate(elements):
self.combo.insertItem(i, element)
if __name__ == "__main__":
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
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):
Código: for i, (id, articulo, cantidad, talle, color, costo, ganancia, precio) in enumerate (DatosBase):
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))
Mensajes: 1.306
Temas: 3
Registro en: Feb 2016
Reputación:
71
¡Excelente! Saludos
|