Saltar al contenido

¿Agregar un cuadro de texto a la barra de herramientas del complemento QGIS?

Esta reseña fue aprobado por expertos así aseguramos la exactitud de nuestro post.

Solución:

Esto sería más un comentario que una respuesta (y muy probablemente un punto de partida en lugar de una solución), pero lo publico aquí ya que hay algo de código.

Si desea configurar un cuadro de texto básico, puede usar este código:

from PyQt4.QtGui import *

input_dialog = QInputDialog()
title = "Dialog Title"
label = "Enter some text here: "
enum_type = QLineEdit.Normal
default_text = ""

res = QInputDialog.getText(input_dialog, title, label, enum_type, default_text)

El res variable es una tupla que almacena su texto (como un string) y un booleano que se usa para verificar que se escribió una entrada. También puede cambiar la última línea en:

text_var, typed = QInputDialog.getText(input_dialog, title, label, enum_type, default_text)

para tener directamente su texto almacenado en el text_var variable.

Nota que esto funciona para Qt4, pero creo que debería seguir la misma sintaxis también para Qt5.

Buena respuesta de @mgri (¡no lo elimine ya que es útil para usar dentro de QGIS!). Probé lo siguiente en QGIS 2.18 también con Qt4, pero quizás también sea útil como la otra respuesta. Un par de cosas a anotar:

  • Puedes usar self.textbox.setFixedWidth(80) para establecer el ancho del cuadro de texto.
  • Puedes usar self.textbox.textChanged.connect(self.runTextChange) para conectar el cuadro de texto a una función cada vez que se cambia el texto.

Aquí está el código utilizado:

def initGui(self):
    """Create the menu entries and toolbar icons inside the QGIS GUI."""
    # Create & add a textbox
    self.textbox = QLineEdit(self.iface.mainWindow())
    # Set width
    self.textbox.setFixedWidth(80)
    # Add textbox to toolbar
    self.txtAction = self.toolbar.addWidget(self.textbox)
    # Set tooltip
    self.txtAction.setToolTip(self.tr(u'Current Row Number'))
    # Set callback
    self.textbox.textChanged.connect(self.runTextChange)


def runTextChange(self, rownum):
    # Set active layer
    layer = iface.activeLayer()
    # If textbox is empty or 0 then deselect all features
    if rownum == '' or int(rownum) == 0:
        layer.deselect([feat.id() for feat in layer.getFeatures()])
    else:
        # Else select row number matching the entered value
        for feat in layer.getFeatures():
            if feat.id() == int(rownum) - 1:
                layer.setSelectedFeatures([feat.id()])

Ejemplo:

Ejemplo

Aquí puedes ver las reseñas y valoraciones de los lectores

Recuerda que te concedemos valorar este escrito si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *