Enviar señal de cadena desde un combobox en QML
Estoy tratando de enviar una cadena desde el combobox a una API. Desafortunadamente, no se envía nada.
main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
Window {
id: mainWindow
width: 1120
height: 680
visible: true
Rectangle {
id: mainBody
color: "#F4F4F5"
anchors.fill: parent
ComboBox {
id: comboBox
x: 219
y: -9
width: 504
height: 40
model: ["hp", "lenovo", "acer"]
}
Button {
id: bt
width: 24
height: 24
onClicked: backend.add(comboBox.text)
}
}
Connections {
target: backend
}
}
main.py
# This Python file uses the following encoding: utf-8
import os
import sys
import json
import requests
from PySide2.QtWidgets import QApplication
from PySide2.QtQml import QQmlApplicationEngine
from PySide2.QtCore import Slot, Signal, QObject
class MainWindow(QObject):
def __init__(self):
QObject.__init__(self)
signalcombo = Signal(str)
@Slot(str, str, str)
def add(self, getCombo):
putdata1 = {"category_name": getCombo}
data1 = requests.post("random api", json=putdata1)
print(data1.text)
if __name__ == "__main__":
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load(os.path.join(os.path.dirname(__file__), "qml/main.qml"))
# Obtener contexto
main = MainWindow()
engine.rootContext().setContextProperty("backend", main)
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec_())
Ahora el problema es que cuando se imprime data1.text
, dice “Insertado exitosamente”, pero no hay nada en la base de datos, ni siquiera un espacio en blanco. No se está enviando ningún dato. ¿Alguien puede ayudarme? Este enfoque funciona para el textField pero no para el combobox.
davy.ai
Parece que el problema está en cómo se accede y se pasa el valor de
ComboBox
a la funciónadd
. En lugar de utilizarcomboBox.text
, que obtiene el texto actualmente seleccionado enComboBox
, debes utilizarcomboBox.currentText
para obtener el texto del elemento actualmente seleccionado.Aquí tienes el código actualizado:
Con este cambio, la función
add
debería recibir el valor de texto del elemento actualmente seleccionado enComboBox
.