#1 Tue 25 April 2023 18:25
- AntoninQueloz
- Juste Inscrit !
- Date d'inscription: 19 Jan 2011
- Messages: 4
Interruption du script pour choix dans liste deroulante
Hello les cracks de FME,
Voici ma situation: j'ai un script qui utilise HTTPCaller pour du geocodage dans OpenStreetMap et MapGeoAdmin (retrouver des coordonnées à partir d'une adresse dans un attribut en entrée) et, parfois, plusieurs "adresses" sont localisées pour une même adresse en entrée ce qui me donne une liste d'adresse (extraites avec JSONFlattener).
Mon problème est que j'aimerais, en un seul script (et ça fait un moment que je planche là-dessus), stopper le script et généré une boîte de dialogue avec possibilité de choisir la bonne adresse dans une liste déroulante du type:
ATTRIBUT ADRESSE ENTRÉE => CHOIX DES ADRESSES DETECTEES (combobox)
"Mont 1, 1950 Sion" => "1, Chemin du Lac de Mont-d'Orge, La Muraz, Sion, Valais, 1950, Suisse"
=> "1, Rue du Mont, Sion, Valais, 1950, Suisse"
=> "1a, Chemin du Lac de Mont-d'Orge, La Muraz, Sion, Valais, 1950, Suisse"
... étant donné que, de façon automatisé, il n'est pas possible de savoir laquelle est la bonne.
Auriez-vous une idée de la façon dont je pourrais procéder?
Un grand merci d'avance pour votre aide, Antonin
Hors ligne
#2 Mon 15 May 2023 09:40
- AntoninQueloz
- Juste Inscrit !
- Date d'inscription: 19 Jan 2011
- Messages: 4
Re: Interruption du script pour choix dans liste deroulante
J'ai trouvé un script python avec le transformer PythonCaller qui me convient au niveau de l'interface (liste déroulante de choix):
Code:
# coding: utf-8 from PyQt5.QtWidgets import QApplication, QWidget , QComboBox import sys def actionSelect(): select = qcombo.currentText() print("Selected street : " + select) app = QApplication(sys.argv) root = QWidget() root.setWindowTitle("Street Selected") root.setGeometry(100 , 100 , 500 , 300) # création de la liste QCombobox qcombo = QComboBox(root) qcombo.setGeometry(100 , 10 , 150 , 30) qcombo.activated.connect(actionSelect) # création de la liste des items L = ["Street A, City A" , "Street B, City B" , "Street C, City C"] # ajout des items à la liste QCombobox qcombo.addItems(["Street A, City A" , "Street B, City B" , "Street C, City C"]) root.show() sys.exit(app.exec_())
Mais je ne comprends pas comment je peux récupérer le nom de la rue choisi dans la liste pour renseigner un attribut dans FME (dans le script FME ci-dessus je voudrais que la variable "select" renseigne l'attribut "street" du feature FME) et, que sitôt choisi, la boite de dialogue se ferme automatiquement pour que mon workbench continue.
Est-ce que quelqu'un à une idée du code à ajouter dans mon script python pour réaliser cela?
Merci beaucoup d'avance pour votre aide
Antonin
Hors ligne
#3 Wed 17 May 2023 08:40
Re: Interruption du script pour choix dans liste deroulante
Bonjour, a priori impossible de stopper FME pour modifier un paramètre et le relancer avec ce dernier.
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#4 Wed 17 May 2023 08:44
- AntoninQueloz
- Juste Inscrit !
- Date d'inscription: 19 Jan 2011
- Messages: 4
Re: Interruption du script pour choix dans liste deroulante
Si on m'a donné la solution via FME Community:
Code:
import fme import fmeobjects from PyQt5.QtWidgets import (QApplication, QWidget, QInputDialog) class StreetNameDialog(QWidget): def __init__(self, items): super().__init__() self.text = '' self.showDialog(items) def showDialog(self, items): text, ok = QInputDialog.getItem(self, 'Street', 'Street name:', items, editable=False) if ok: self.text = str(text) class SelectStreet(object): def __init__(self): pass def input(self, feature): app = QApplication([]) list_items = ["MGA : "+feature.getAttribute('SFIBER_MGA_display_name'), "OSM : "+feature.getAttribute('SFIBER_OSM_display_name')] dlg = StreetNameDialog(list_items) feature.setAttribute('Street', dlg.text) self.pyoutput(feature) def close(self): pass
Merci
Hors ligne