Ok, did some testing...
Mmm something fishy is going on..
First time I used: dialog.close() I got an python exception telling me that
QgsAttributeForm didn't have a close() ..
So the 'dailog' is actually not a QDialog but the QgsAttributeForm (which is a
QWidget) ON a QDialog..
But... I could never replicate that anymore after that first time ???
Then I was able to replicate your crash by calling
dialog.parent().reject()
But tried
dialog.parent().close()
dialog.parent().hide()
but those were OK (but not working the way you want)
BUT: I think the reason close/hide are not working is because this is called
BEFORE showing the dialog.
So the close/hide are actually called before your dialog is even shown.
And THEN QGIS will show the dialog (and you are too late)?
So I think what you want is not possible?
You could maybe create a new ui/dialog in which tells the user something
(besides showing the other ui)?
But closing the dialog (before it is even shown) doesn't seem possible.
I'm not 100% sure of all this, so if others want to try or know better, please
let me know
Regards,
Richard Duivenvoorde
PS tip to debug: when you use print-statements in your python init script, AND
open the python console, the output will show up there!
On 12/20/22 10:04, PIERRE Sylvain wrote:
When adding a new feature (polygon) I would like to close form when centroid
does not intersect a polygon from an other layer
Here is my full python init form dialog function:
# -*- coding: utf8 -*-
from qgis.core import QgsVectorLayer, QgsFeatureRequest, QgsRectangle,
QgsGeometry, QgsProject, QgsPointXY
import qgis.utils
from PyQt5.QtWidgets import QDialogButtonBox, QLineEdit, QComboBox
from PyQt5.QtCore import QObject
import os.path
import getpass
def dealWithPoly(dialog, layerid, featureid):
global editMode
global iface
iface = qgis.utils.iface
geom = featureid.geometry()
if geom:
editMode = 'insert'
layers = QgsProject.instance().mapLayers().values()
canvas = iface.mapCanvas()
geo_point = geom.centroid()
canvas_crs_txt = canvas.mapSettings().destinationCrs().authid()
canvas_crs = canvas_crs_txt.split(':')[1]
layerNameRPG = 'MAEC2023 parcelles'
testlayerRPG = QgsProject().instance().mapLayersByName(layerNameRPG)
if testlayerRPG:
bv = testlayerRPG[0]
layer_crs_txt = bv.crs().authid()
layer_crs = layer_crs_txt.split(':')[1]
if canvas_crs != layer_crs:
xform =
QgsCoordinateTransform(QgsCoordinateReferenceSystem('EPSG:'+canvas_crs),
QgsCoordinateReferenceSystem('EPSG:'+layer_crs), QgsProject.instance())
geo_point.transform(xform)
find_parcelle = False
polygon = [feature for feature in bv.getFeatures()]
for pol in polygon:
geo_pol = pol.geometry()
if geo_pol.contains(geo_point):
pacageVal = pol['Pacage']
numIlot = str(pol['Num_ilot'])
find_parcelle = True
break
if not find_parcelle:
txt = u"Saisie en dehors des limites du RPG"
iface.messageBar().pushMessage(txt, level=Qgis.Warning)
#dialog.parent().reject()
dialog.close()
#print(dialog.parent())
else:
linedit_pacage = dialog.findChild(QLineEdit,"PACAGE")
linedit_pacage.setText(pacageVal)
linedit_numilot = dialog.findChild(QLineEdit,"NUM_ILOT")
linedit_numilot.setText(numIlot)
-----Message d'origine-----
De : QGIS-Developer <qgis-developer-boun...@lists.osgeo.org> De la part de
Richard Duivenvoorde via QGIS-Developer
Envoyé : mardi 20 décembre 2022 09:44
À : qgis-developer@lists.osgeo.org
Objet : Re: [QGIS-Developer] Pyqgis Close init form
Soyez vigilant : ce courriel provient d'une organisation externe à la CeA.
• Assurez-vous d’abord qu’il ne s’agit pas d’un email malveillant avant de
cliquer sur tout lien ou pièce jointe.
Apprendre à reconnaître un email de
phishing.<https://intranet.alsace.eu/actualites/apprenez-a-reconnaitre-un-email-phishing/>
Can you provide a little more code?
And more info where exactly it is called (in the startup.py or in some form
init code?
Is 'dialog' available in the code part in which you try to close it?
Regards,
Richard Duivenvoorde
On 12/20/22 09:24, PIERRE Sylvain via QGIS-Developer wrote:
Hi all,
I can not achieve closing a form in init pyqgis fonction. I try :
dialog.close()
But form stay without any widgets
I try
dialog.parent().close()
Does nothing
dialog.parent().reject()
Qgis crash
Any hints ?
Thanks
**
Sylvain PIERRE**
Chef de projet système d’information
Direction des Systèmes d’Information et du Développement Numérique
Service Projets et Ingénierie Numérique
*Collectivité européenne d’Alsace*
Tél : 03 88 76 68 88
sylvain.pie...@alsace.eu <mailto:sylvain.pie...@alsace.eu>
www.alsace.eu <http://www.alsace.eu>
facebook <http://www.facebook.com/toutelalsace>twitter
<http://www.twitter.com/toutelalsace>insta <http://www.instagram.com/toutelalsace>
_______________________________________________
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
_______________________________________________
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
_______________________________________________
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer