1 votos

GUI de Python para el plugin de QGIS; ¿cómo referenciar los controles del formulario en el código?

Llevo unas horas dando vueltas a esto, así que espero que alguien pueda ayudar. Estoy familiarizado con VB, C #, pero no Python - y luchando para hacer algo bastante simple.

He creado un formulario utilizando QT Designer. En este formulario hay un widget QlistView y un botón "Browse...". Quiero ser capaz de seleccionar los archivos haciendo clic en el botón, y la lista de estos en el QlistView. Debería ser bastante fácil.

En los lenguajes con los que estoy familiarizado haría referencia al objeto QlistView usando una sintaxis como [nombre del formulario].[nombre del control] pero no se puede hacer eso aquí, aparentemente.

Tengo self.dlg en el propio formulario.

El widget de la lista es un QlistWidget, con el nombre listWidget .

Estoy usando el siguiente código para manejar el clic del botón:

def handleBrowseButton(self):
pth =os.path.normpath('E:')
filter = "TXT (*.txt)"
file_name = QtGui.QFileDialog()
file_name.setFileMode(3) # 3=existing files
names = file_name.getOpenFileNames(None, "Open files", pth, filter)
if not names:
  print "CANCELLED"
  return

l = self.dlg.findChild(listWidget)

...pero me he atascado un poco en la última parte. ¿Tengo que usar findChild / findChildren / algo más?

El código anterior sí se ejecuta, así que no tengo problemas para llegar a ese punto. El problema es sólo cómo establecer una referencia al objeto listWidget en el formulario para poder referirse a él a partir de ese momento.

Mi intención es establecer 'l' para referirse al listWidget y luego hacer algo como

l.list.additem(filename)

2voto

motae Puntos 1

Lo he conseguido, después de muchas pruebas y errores. No estoy seguro de lo que estaba haciendo mal originalmente, realmente. Debe haber estado perdiendo algo, en alguna parte.

Los controles pueden ser referenciados utilizando la notación normal de "punto", es decir

def handleBrowseButton(self):
pth =os.path.normpath('E:')
filter = "TXT (*.txt)"
file_name = QtGui.QFileDialog()
file_name.setFileMode(3) # 3=existing files
names = file_name.getOpenFileNames(None, "Open files", pth, filter)
if not names:
  print "CANCELLED"
  return

self.dlg.listWidget.clear()

for fn in names:
  self.dlg.listWidget.addItem(fn)

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