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:
Aquí puedes ver las reseñas y valoraciones de los lectores
Recuerda que te concedemos valorar este escrito si te fue útil.