1 votos

QGIS QComboBox Lista de controles de entrada de formulario

Debo estar pasando por alto algo muy simple. Quiero utilizar una lista desplegable QComboxBox para controlar la interpretación de entrada de formulario, en lugar de proporcionar una selección de valores de entrada. Tal vez este ejemplo podría ayudar a aclarar:

dropdown

La lista desplegable especificaría qué unidades de peso introducirá el usuario. En otras palabras, si se eligiera el valor de la lista "kilogramos", una entrada posterior de "10" por parte del usuario en el área de texto se interpretaría como 10 kilogramos. Hasta donde yo sé, no hay manera de vincular un QComboBox de esta manera. ¿Alguna sugerencia?

1voto

Jeremy White Puntos 381

Yo sugeriría algo así. Puede recuperar el valor seleccionado en el cuadro combinado y utilizarlo, junto con un valor de edición de línea, en una cadena como una etiqueta para dar contexto al valor introducido en la edición de línea (con fines de visualización o interpretación del usuario), o convertir el valor de edición de línea en un número entero y manipularlo en función del valor del cuadro combinado (por ejemplo, con fines de cálculo).

Pruebe este código de ejemplo en la consola python de Qgis 3:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class Dlg(QDialog):
    def __init__(self):
        QDialog.__init__(self)
        self.setGeometry(200, 200, 450, 250)
        self.lbl1 = QLabel('Enter a weight:', self)
        self.lbl1.move(5, 30)
        self.le1 = QLineEdit(self)
        self.le1.move(100, 30)
        self.lbl2 = QLabel('Units:', self)
        self.lbl2.move(250, 30)
        self.cb1 = QComboBox(self)
        self.cb1.addItems(['kilograms', 'pounds'])
        self.cb1.move(300, 30)
        self.lbl3 = QLabel('Value entered:', self)
        self.lbl3.setFont(QFont('Arial', 18))
        self.lbl3.adjustSize()
        self.lbl3.move(75, 150)
        self.btn_ok = QPushButton('Enter', self)
        self.btn_ok.move(175, 85)
        self.btn_ok.clicked.connect(self.enter)

    def enter(self):
        '''Retrieve values of line edit and combo box and either print them to a label etc for
        display purposes (commented line below) or use them in a conditional statement'''
#        self.lbl3.setText('Value entered: ' + self.le1.text() + ' ' + self.cb1.currentText())
        if self.cb1.currentText() == 'kilograms':
            self.lbl3.setText('Value entered: ' + self.le1.text()+'kg')
        elif self.cb1.currentText() == 'pounds':
            self.lbl3.setText('Value entered: ' + self.le1.text()+'lbs')
        self.lbl3.adjustSize()

w = Dlg()
w.show()

Imágenes del diálogo resultante a continuación:

enter image description here

enter image description here

enter image description here

Además, digamos que está utilizando el valor introducido en la edición de línea en un cálculo. Podría utilizar el valor del cuadro combinado para manipular el valor de edición de línea en la sentencia condicional. Por ejemplo, si usted está trabajando en kilogramos y desea convertir los valores que se introdujeron en libras, usted podría hacer algo como:

if self.cb1.currentText() == 'pounds':
    val = int(self.le1.text()) * 0.45
elif self.cb1.currentText() == 'kilograms':
    val = int(self.le1.text())

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X