es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en cómo se accede y se pasa el valor de ComboBox a la función add. En lugar de utilizar comboBox.text, que obtiene el texto actualmente seleccionado en ComboBox, debes utilizar comboBox.currentText para obtener el texto del elemento actualmente seleccionado.

    Aquí tienes el código actualizado:

    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.currentText)
    }
    

    Con este cambio, la función add debería recibir el valor de texto del elemento actualmente seleccionado en ComboBox.

Comments are closed.