Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pyqt5_to_pyqt6.py fails on infinite recursion #58659

Closed
2 tasks done
kannes opened this issue Sep 11, 2024 · 5 comments · Fixed by #58785
Closed
2 tasks done

pyqt5_to_pyqt6.py fails on infinite recursion #58659

kannes opened this issue Sep 11, 2024 · 5 comments · Fixed by #58785
Assignees
Labels
Bug Either a bug report, or a bug fix. Let's hope for the latter! Feedback Waiting on the submitter for answers

Comments

@kannes
Copy link
Contributor

kannes commented Sep 11, 2024

What is the bug or the crash?

The script for conversion of Qt5 Python code to Qt6 always fails for me with

$ python /path/QGIS/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py foo
Traceback (most recent call last):
 File "/path/QGIS/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py", line 678, in <module>
   raise SystemExit(main())
                    ^^^^^^
 File "/path/QGIS/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py", line 663, in main
   get_class_enums(value)
 File "/path/QGIS/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py", line 650, in get_class_enums
   get_class_enums(value, depth)
 File "/path/QGIS/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py", line 650, in get_class_enums
   get_class_enums(value, depth)
 File "/path/QGIS/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py", line 650, in get_class_enums
   get_class_enums(value, depth)
 [Previous line repeated 993 more times]
 File "/path/QGIS/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py", line 617, in get_class_enums
   matched_classes = {item}.union(all_subclasses(item))
                                  ^^^^^^^^^^^^^^^^^^^^
 File "/path/QGIS/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py", line 615, in all_subclasses
   return {cls}.union(
                     ^
RecursionError: maximum recursion depth exceeded

Steps to reproduce the issue

  1. Create a new directory foo
  2. Run python pyqt5_to_pyqt6.py foo
  3. See the crash

This happens the same, if a proper directory full of Python files is specified or an empty directory.

Versions

<style type="text/css"> p, li { white-space: pre-wrap; } </style>
QGIS version 3.38.1-Grenoble QGIS code branch Release 3.38
Qt version 5.15.14
Compiled against Python 3.12.4 Running against Python 3.12.5
GDAL/OGR version 3.9.1
PROJ version 9.4.1
EPSG Registry database version v11.006 (2024-03-13)
GEOS version 3.12.2-CAPI-1.18.2
Compiled against SQLite 3.46.0 Running against SQLite 3.46.1
PDAL version 2.7.2
PostgreSQL client version 16.3
SpatiaLite version 5.1.0
QWT version 6.3.0
QScintilla2 version 2.14.1
OS version Manjaro Linux
       
Active Python plugins
plugin_reloader 0.11
spatial_filter_qt6 1.6
MetaSearch 0.3.6
db_manager 0.1.20
grassprovider 2.12.99
processing 2.12.99
QGIS version 3.38.1-Grenoble QGIS code branch [Release 3.38](https://github.com/qgis/QGIS/tree/release-3_38) Qt version 5.15.14 Compiled against Python 3.12.4 Running against Python 3.12.5 GDAL/OGR version 3.9.1 PROJ version 9.4.1 EPSG Registry database version v11.006 (2024-03-13) GEOS version 3.12.2-CAPI-1.18.2 Compiled against SQLite 3.46.0 Running against SQLite 3.46.1 PDAL version 2.7.2 PostgreSQL client version 16.3 SpatiaLite version 5.1.0 QWT version 6.3.0 QScintilla2 version 2.14.1 OS version Manjaro Linux

Active Python plugins
plugin_reloader
0.11
spatial_filter_qt6
1.6
MetaSearch
0.3.6
db_manager
0.1.20
grassprovider
2.12.99
processing
2.12.99

Supported QGIS version

  • I'm running a supported QGIS version according to the roadmap.

New profile

Additional context

I made the recursive call to get_class_enums() halt if it went to a depth of more than 2-3, and collect the items on which it went this far, I get:

qgis_analysis.QgsGeometryCheck.Change
qgis_analysis.QgsGeometryCheck.ChangeType
qgis_analysis.QgsGeometryCheck.ChangeWhat
qgis_analysis.QgsGeometryCheck.CheckType
qgis_analysis.QgsGeometryCheck.Flag
qgis_analysis.QgsGeometryCheck.Flags
qgis_analysis.QgsGeometryCheck.LayerFeatureIds
qgis_core.Qgis
qgis_core.Qgis.AnnotationItemFlags
qgis_core.Qgis.AnnotationItemGuiFlags
qgis_core.Qgis.BabelCommandFlags
qgis_core.Qgis.BabelFormatCapabilities
qgis_core.Qgis.BrowserItemCapabilities
qgis_core.Qgis.CoordinateTransformationFlags
qgis_core.Qgis.DataItemProviderCapabilities
qgis_core.Qgis.DataProviderFlags
qgis_core.Qgis.DatabaseProviderConnectionCapabilities2
qgis_core.Qgis.DateTimeStatistics
qgis_core.Qgis.FeatureRequestFlags
qgis_core.Qgis.FieldConfigurationFlags
qgis_core.Qgis.FileOperationFlags
qgis_core.Qgis.GeometryValidityFlags
qgis_core.Qgis.GpsInformationComponents
qgis_core.Qgis.HistoryProviderBackends
qgis_core.Qgis.LabelLinePlacementFlags
qgis_core.Qgis.LabelPolygonPlacementFlags
qgis_core.Qgis.LabelingFlags
qgis_core.Qgis.LayerFilters
qgis_core.Qgis.LayerTreeFilterFlags
qgis_core.Qgis.LegendJsonRenderFlags
qgis_core.Qgis.LoadStyleFlags
qgis_core.Qgis.MapLayerActionFlags
qgis_core.Qgis.MapLayerActionTargets
qgis_core.Qgis.MapLayerProperties
qgis_core.Qgis.MapLayerRendererFlags
qgis_core.Qgis.MapSettingsFlags
qgis_core.Qgis.MarkerLinePlacements
qgis_core.Qgis.MessageLevel
qgis_core.Qgis.PlotToolFlags
qgis_core.Qgis.ProcessingAlgorithmFlags
qgis_core.Qgis.ProcessingFeatureSourceDefinitionFlags
qgis_core.Qgis.ProcessingFeatureSourceFlags
qgis_core.Qgis.ProcessingParameterFlags
qgis_core.Qgis.ProcessingParameterTypeFlags
qgis_core.Qgis.ProcessingProviderFlags
qgis_core.Qgis.ProfileGeneratorFlags
qgis_core.Qgis.ProjectCapabilities
qgis_core.Qgis.ProjectFlags
qgis_core.Qgis.ProjectReadFlags
qgis_core.Qgis.ProviderStyleStorageCapabilities
qgis_core.Qgis.RasterBandStatistics
qgis_core.Qgis.RasterInterfaceCapabilities
qgis_core.Qgis.RasterProviderCapabilities
qgis_core.Qgis.RasterRendererCapabilities
qgis_core.Qgis.RasterRendererFlags
qgis_core.Qgis.RasterTemporalCapabilityFlags
qgis_core.Qgis.RelationshipCapabilities
qgis_core.Qgis.RenderContextFlags
qgis_core.Qgis.ScriptLanguageCapabilities
qgis_core.Qgis.SelectionFlags
qgis_core.Qgis.SettingsOptions
qgis_core.Qgis.SettingsTreeNodeOptions
qgis_core.Qgis.SldExportOptions
qgis_core.Qgis.SnappingTypes
qgis_core.Qgis.SqlLayerDefinitionCapabilities
qgis_core.Qgis.Statistics
qgis_core.Qgis.StringStatistics
qgis_core.Qgis.SublayerFlags
qgis_core.Qgis.SublayerQueryFlags
qgis_core.Qgis.SymbolFlags
qgis_core.Qgis.SymbolLayerFlags
qgis_core.Qgis.SymbolLayerUserFlags
qgis_core.Qgis.SymbolPreviewFlags
qgis_core.Qgis.SymbolRenderHints
qgis_core.Qgis.TextRendererFlags
qgis_core.Qgis.TiledSceneProviderCapabilities
qgis_core.Qgis.TiledSceneRendererFlags
qgis_core.Qgis.TiledSceneRequestFlags
qgis_core.Qgis.VectorDataProviderAttributeEditCapabilities
qgis_core.Qgis.VectorFileWriterCapabilities
qgis_core.Qgis.VectorLayerTypeFlags
qgis_core.Qgis.VectorRenderingSimplificationFlags
qgis_core.Qgis.VectorTileProviderCapabilities
qgis_core.Qgis.VectorTileProviderFlags
qgis_core.Qgis.ViewSyncModeFlags
qgis_core.Qgis.ZonalStatistics
qgis_core.QgsAbstractDatabaseProviderConnection.Capabilities
qgis_core.QgsAbstractDatabaseProviderConnection.Capability
qgis_core.QgsAbstractDatabaseProviderConnection.GeometryColumnCapabilities
qgis_core.QgsAbstractDatabaseProviderConnection.GeometryColumnCapability
qgis_core.QgsAbstractDatabaseProviderConnection.QueryResult
qgis_core.QgsAbstractDatabaseProviderConnection.SpatialIndexOptions
qgis_core.QgsAbstractDatabaseProviderConnection.SqlVectorLayerOptions
qgis_core.QgsAbstractDatabaseProviderConnection.TableFlags
qgis_core.QgsAbstractDatabaseProviderConnection.TableProperty
qgis_core.QgsAbstractGeometry.AxisOrder
qgis_core.QgsAbstractGeometry.SegmentationToleranceType
qgis_core.QgsAbstractGeometry.WkbFlag
qgis_core.QgsAbstractGeometry.WkbFlags
qgis_core.QgsArcGisRestUtils.FeatureToJsonFlags
qgis_core.QgsAttributeEditorRelation.Button
qgis_core.QgsAttributeEditorRelation.Buttons
qgis_core.QgsAuthManager.MessageLevel
qgis_core.QgsDataSourceUri.SslMode
qgis_core.QgsFieldProxyModel.Filter
qgis_core.QgsFieldProxyModel.Filters
qgis_core.QgsLayoutManagerProxyModel.Filter
qgis_core.QgsLayoutManagerProxyModel.Filters
qgis_core.QgsLocatorFilter.Flag
qgis_core.QgsLocatorFilter.Flags
qgis_core.QgsLocatorFilter.Priority
qgis_core.QgsMapLayer.LayerFlag
qgis_core.QgsMapLayer.LayerFlags
qgis_core.QgsMapLayer.PropertyType
qgis_core.QgsMapLayer.ReadFlag
qgis_core.QgsMapLayer.ReadFlags
qgis_core.QgsMapLayer.StyleCategories
qgis_core.QgsMapLayer.StyleCategory
qgis_core.QgsMeshDriverMetadata.MeshDriverCapabilities
qgis_core.QgsMeshDriverMetadata.MeshDriverCapability
qgis_core.QgsPointCloudAttributeProxyModel.Filter
qgis_core.QgsPointCloudAttributeProxyModel.Filters
qgis_core.QgsProcessing.LayerOptionsFlags
qgis_core.QgsProjectStyleDatabaseProxyModel.Filters
qgis_core.QgsRasterProjector.Precision
qgis_core.QgsRenderChecker.Flags
qgis_core.QgsServerWmsDimensionProperties.PredefinedWmsDimensionName
qgis_core.QgsServerWmsDimensionProperties.WmsDimensionInfo
qgis_core.QgsSnappingConfig.IndividualLayerSettings
qgis_core.QgsSnappingConfig.ScaleDependencyMode
qgis_core.QgsSnappingConfig.SnappingType
qgis_core.QgsTask.Flag
qgis_core.QgsTask.Flags
qgis_core.QgsTask.SubTaskDependency
qgis_core.QgsTask.TaskStatus
qgis_gui.QgsAdvancedDigitizingDockWidget.CadCapacities
qgis_gui.QgsAdvancedDigitizingDockWidget.CadCapacity
qgis_gui.QgsAdvancedDigitizingDockWidget.CadConstraint
qgis_gui.QgsAdvancedDigitizingDockWidget.WidgetSetMode
qgis_gui.QgsAttributeEditorContext.FormMode
qgis_gui.QgsAttributeEditorContext.Mode
qgis_gui.QgsAttributeEditorContext.RelationMode
qgis_gui.QgsAttributeTableFilterModel.ColumnType
qgis_gui.QgsAttributeTableFilterModel.FilterMode
qgis_gui.QgsAuthSettingsWidget.WarningType
qgis_gui.QgsCodeEditor.Flags
qgis_gui.QgsColorButton.Behavior
qgis_gui.QgsColorRampLegendNodeWidget.Capabilities
qgis_gui.QgsColorTextWidget.ColorTextFormat
qgis_gui.QgsCoordinateReferenceSystemProxyModel.Filter
qgis_gui.QgsCoordinateReferenceSystemProxyModel.Filters
qgis_gui.QgsDualView.FeatureListBrowsingAction
qgis_gui.QgsDualView.ViewMode
qgis_gui.QgsExpressionBuilderWidget.Flag
qgis_gui.QgsExpressionBuilderWidget.Flags
qgis_gui.QgsFileWidget.RelativeStorage
qgis_gui.QgsFileWidget.StorageMode
qgis_gui.QgsFilterLineEdit.ClearMode
qgis_gui.QgsFloatingWidget.AnchorPoint
qgis_gui.QgsFontButton.Mode
qgis_gui.QgsGui.HigFlag
qgis_gui.QgsGui.HigFlags
qgis_gui.QgsGui.ProjectCrsBehavior
qgis_gui.QgsMapToolIdentify.IdentifyMode
qgis_gui.QgsMapToolIdentify.IdentifyResult
qgis_gui.QgsMapToolIdentify.LayerType
qgis_gui.QgsMapToolIdentify.Type
qgis_gui.QgsMediaWidget.Mode
qgis_gui.QgsProcessingToolboxProxyModel.Filters
qgis_gui.QgsRelationEditorWidget.Button
qgis_gui.QgsRelationEditorWidget.Buttons
qgis_gui.QgsSourceSelectProvider.Capabilities
qgis_gui.QgsSourceSelectProvider.Ordering
qgis_gui.QgsSublayersDialog.LayerDefinition
qgis_gui.QgsSublayersDialog.PromptMode
qgis_gui.QgsSublayersDialog.ProviderType
qgis_gui.QgsVectorLayerSaveAsDialog.Options
@kannes kannes added the Bug Either a bug report, or a bug fix. Let's hope for the latter! label Sep 11, 2024
@nicogodet
Copy link
Member

nicogodet commented Sep 13, 2024

Same here:

PS D:\_QGIS\PLUGINS\isl_box> python .\scripts\pyqt5_to_pyqt6.py .\isl_box\core\
Could not find platform independent libraries <prefix>
Traceback (most recent call last):
  File "D:\_QGIS\PLUGINS\isl_box\scripts\pyqt5_to_pyqt6.py", line 710, in get_class_enums
    get_class_enums(value)
  File "D:\_QGIS\PLUGINS\isl_box\scripts\pyqt5_to_pyqt6.py", line 710, in get_class_enums
    get_class_enums(value)
  File "D:\_QGIS\PLUGINS\isl_box\scripts\pyqt5_to_pyqt6.py", line 710, in get_class_enums
    get_class_enums(value)
  [Previous line repeated 995 more times]
  File "D:\_QGIS\PLUGINS\isl_box\scripts\pyqt5_to_pyqt6.py", line 674, in get_class_enums
    matched_classes = {item}.union(all_subclasses(item))
                                   ^^^^^^^^^^^^^^^^^^^^
  File "D:\_QGIS\PLUGINS\isl_box\scripts\pyqt5_to_pyqt6.py", line 672, in all_subclasses
    return {cls}.union(s for c in cls.__subclasses__() for s in all_subclasses(c))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RecursionError: maximum recursion depth exceeded

(my editor might have fucked up the format so lines differs)

I added a print juste before the recursive call and here is the output:

python .\scripts\pyqt5_to_pyqt6.py .\isl_box\
Get enums for qgis.PyQt.QtCore
Get enums for 
***************************************************************************
  QtCore.py
  ---------------------
  Date                 : November 2015
  Copyright            : (C) 2015 by Matthias Kuhn
  Email                : matthias at opengis dot ch
***************************************************************************
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
***************************************************************************

Get enums for qgis.PyQt
Get enums for <_frozen_importlib_external.SourceFileLoader object at 0x000001FA216EA870>
Get enums for ModuleSpec(name='qgis.PyQt.QtCore', loader=<_frozen_importlib_external.SourceFileLoader object at 0x000001FA216EA870>, origin='C:\\OSGeo4W\\apps\\qgis\\python\\qgis\\PyQt\\QtCore.py')
Get enums for C:\OSGeo4W\apps\qgis\python\qgis\PyQt\QtCore.py
Get enums for C:\OSGeo4W\apps\qgis\python\qgis\PyQt\__pycache__\QtCore.cpython-312.pyc
Get enums for {'__name__': 'builtins', '__doc__': "Built-in functions, types, exceptions, and other objects.\n\nThis module provides direct access to all 'built-in'\nidentifiers of Python; for example, builtins.len is\nthe full name for the built-in function len().\n\nThis module is not normally accessed explicitly by most\napplications, but can be useful in modules that provide\nobjects with the same name as a built-in value, but in\nwhich the built-in of that name is also needed.", '__package__': '', '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>, origin='built-in'), '__build_class__': <built-in function __build_class__>, '__import__': <built-in function __import__>, 'abs': <built-in function abs>, 'all': <built-in function all>, 'any': <built-in function any>, 'ascii': <built-in function ascii>, 'bin': <built-in function bin>, 'breakpoint': <built-in function breakpoint>, 'callable': <built-in function callable>, 'chr': <built-in function chr>, 'compile': <built-in function compile>, 'delattr': <built-in function delattr>, 'dir': <built-in function dir>, 'divmod': <built-in function divmod>, 'eval': <built-in function eval>, 'exec': <built-in function exec>, 'format': <built-in function format>, 'getattr': <built-in function getattr>, 'globals': <built-in function globals>, 'hasattr': <built-in function hasattr>, 'hash': <built-in function hash>, 'hex': <built-in function hex>, 'id': <built-in function id>, 'input': <built-in function input>, 'isinstance': <built-in function isinstance>, 'issubclass': <built-in function issubclass>, 'iter': <built-in function iter>, 'aiter': <built-in function aiter>, 'len': <built-in function len>, 'locals': <built-in function locals>, 'max': <built-in function max>, 'min': <built-in function min>, 'next': <built-in function next>, 'anext': <built-in function anext>, 'oct': <built-in function oct>, 'ord': <built-in function ord>, 'pow': <built-in function pow>, 'print': <built-in function print>, 'repr': <built-in function repr>, 'round': <built-in function round>, 'setattr': <built-in function setattr>, 'sorted': <built-in function sorted>, 'sum': <built-in function sum>, 'vars': <built-in function vars>, 'None': None, 'Ellipsis': Ellipsis, 'NotImplemented': NotImplemented, 'False': False, 'True': True, 'bool': <class 'bool'>, 'memoryview': <class 'memoryview'>, 'bytearray': <class 'bytearray'>, 'bytes': <class 'bytes'>, 'classmethod': <class 'classmethod'>, 'complex': <class 'complex'>, 'dict': <class 'dict'>, 'enumerate': <class 'enumerate'>, 'filter': <class 'filter'>, 'float': <class 'float'>, 'frozenset': <class 'frozenset'>, 'property': <class 'property'>, 'int': <class 'int'>, 'list': <class 'list'>, 'map': <class 'map'>, 'object': <class 'object'>, 'range': <class 'range'>, 'reversed': <class 'reversed'>, 'set': <class 'set'>, 'slice': <class 'slice'>, 'staticmethod': <class 'staticmethod'>, 'str': <class 'str'>, 'super': <class 'super'>, 'tuple': <class 'tuple'>, 'type': <class 'type'>, 'zip': <class 'zip'>, '__debug__': True, 'BaseException': <class 'BaseException'>, 'BaseExceptionGroup': <class 'BaseExceptionGroup'>, 'Exception': <class 'Exception'>, 'GeneratorExit': <class 'GeneratorExit'>, 'KeyboardInterrupt': <class 'KeyboardInterrupt'>, 'SystemExit': <class 'SystemExit'>, 'ArithmeticError': <class 'ArithmeticError'>, 'AssertionError': <class 'AssertionError'>, 'AttributeError': <class 'AttributeError'>, 'BufferError': <class 'BufferError'>, 'EOFError': <class 'EOFError'>, 'ImportError': <class 'ImportError'>, 'LookupError': <class 'LookupError'>, 'MemoryError': <class 'MemoryError'>, 'NameError': <class 'NameError'>, 'OSError': <class 'OSError'>, 'ReferenceError': <class 'ReferenceError'>, 'RuntimeError': <class 'RuntimeError'>, 'StopAsyncIteration': <class 'StopAsyncIteration'>, 'StopIteration': <class 'StopIteration'>, 'SyntaxError': <class 'SyntaxError'>, 'SystemError': <class 'SystemError'>, 'TypeError': <class 'TypeError'>, 'ValueError': <class 'ValueError'>, 'Warning': <class 'Warning'>, 'FloatingPointError': <class 'FloatingPointError'>, 'OverflowError': <class 'OverflowError'>, 'ZeroDivisionError': <class 'ZeroDivisionError'>, 'BytesWarning': <class 'BytesWarning'>, 'DeprecationWarning': <class 'DeprecationWarning'>, 'EncodingWarning': <class 'EncodingWarning'>, 'FutureWarning': <class 'FutureWarning'>, 'ImportWarning': <class 'ImportWarning'>, 'PendingDeprecationWarning': <class 'PendingDeprecationWarning'>, 'ResourceWarning': <class 'ResourceWarning'>, 'RuntimeWarning': <class 'RuntimeWarning'>, 'SyntaxWarning': <class 'SyntaxWarning'>, 'UnicodeWarning': <class 'UnicodeWarning'>, 'UserWarning': <class 'UserWarning'>, 'BlockingIOError': <class 'BlockingIOError'>, 'ChildProcessError': <class 'ChildProcessError'>, 'ConnectionError': <class 'ConnectionError'>, 'FileExistsError': <class 'FileExistsError'>, 'FileNotFoundError': <class 'FileNotFoundError'>, 'InterruptedError': <class 'InterruptedError'>, 'IsADirectoryError': <class 'IsADirectoryError'>, 'NotADirectoryError': <class 'NotADirectoryError'>, 'PermissionError': <class 'PermissionError'>, 'ProcessLookupError': <class 'ProcessLookupError'>, 'TimeoutError': <class 'TimeoutError'>, 'IndentationError': <class 'IndentationError'>, 'IndexError': <class 'IndexError'>, 'KeyError': <class 'KeyError'>, 'ModuleNotFoundError': <class 'ModuleNotFoundError'>, 'NotImplementedError': <class 'NotImplementedError'>, 'RecursionError': <class 'RecursionError'>, 'UnboundLocalError': <class 'UnboundLocalError'>, 'UnicodeError': <class 'UnicodeError'>, 'BrokenPipeError': <class 'BrokenPipeError'>, 'ConnectionAbortedError': <class 'ConnectionAbortedError'>, 'ConnectionRefusedError': <class 'ConnectionRefusedError'>, 'ConnectionResetError': <class 'ConnectionResetError'>, 'TabError': <class 'TabError'>, 'UnicodeDecodeError': <class 'UnicodeDecodeError'>, 'UnicodeEncodeError': <class 'UnicodeEncodeError'>, 'UnicodeTranslateError': <class 'UnicodeTranslateError'>, 'ExceptionGroup': <class 'ExceptionGroup'>, 'EnvironmentError': <class 'OSError'>, 'IOError': <class 'OSError'>, 'WindowsError': <class 'OSError'>, 'open': <built-in function open>, 'quit': Use quit() or Ctrl-Z plus Return to exit, 'exit': Use exit() or Ctrl-Z plus Return to exit, 'copyright': Copyright (c) 2001-2023 Python Software Foundation.
All Rights Reserved.

Copyright (c) 2000 BeOpen.com.
All Rights Reserved.

Copyright (c) 1995-2001 Corporation for National Research Initiatives.
All Rights Reserved.

Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
All Rights Reserved., 'credits':     Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands
  for supporting Python development.  See www.python.org for more information., 'license': See https://www.python.org/psf/license/, 'help': Type help() for interactive help, or help(object) for help about object.}
Get enums for Matthias Kuhn
Get enums for November 2015
Get enums for (C) 2015, Matthias Kuhn
Get enums for <built-in function qSetRealNumberPrecision>
Get enums for <built-in function qSetPadChar>
Get enums for <built-in function qSetFieldWidth>
Get enums for <built-in function ws>
Get enums for <built-in function bom>
Get enums for <built-in function reset>
Get enums for <built-in function flush>
Get enums for <built-in function endl>
Get enums for <built-in function center>
Get enums for <built-in function right>
Get enums for <built-in function left>
Get enums for <built-in function scientific>
Get enums for <built-in function fixed>
Get enums for <built-in function lowercasedigits>
Get enums for <built-in function lowercasebase>
Get enums for <built-in function uppercasedigits>
Get enums for <built-in function uppercasebase>
Get enums for <built-in function noforcepoint>
Get enums for <built-in function noforcesign>
Get enums for <built-in function noshowbase>
Get enums for <built-in function forcepoint>
Get enums for <built-in function forcesign>
Get enums for <built-in function showbase>
Get enums for <built-in function hex_>
Get enums for <built-in function dec>
Get enums for <built-in function oct_>
Get enums for <built-in function bin_>
Get enums for <built-in function Q_RETURN_ARG>
Get enums for <built-in function Q_ARG>
Get enums for <built-in function pyqtSlot>
Get enums for <built-in function QT_TRANSLATE_NOOP>
Get enums for <built-in function QT_TR_NOOP_UTF8>
Get enums for <built-in function QT_TR_NOOP>
Get enums for <built-in function Q_FLAGS>
Get enums for <built-in function Q_FLAG>
Get enums for <built-in function Q_ENUMS>
Get enums for <built-in function Q_ENUM>
Get enums for <built-in function Q_CLASSINFO>
Get enums for <built-in function qFloatDistance>
Get enums for <built-in function qQNaN>
Get enums for <built-in function qSNaN>
Get enums for <built-in function qInf>
Get enums for <built-in function qIsNaN>
Get enums for <built-in function qIsFinite>
Get enums for <built-in function qIsInf>
Get enums for <built-in function qFormatLogMessage>
Get enums for <built-in function qSetMessagePattern>
Get enums for <built-in function qInstallMessageHandler>
Get enums for <built-in function qWarning>
Get enums for <built-in function qInfo>
Get enums for <built-in function qFatal>
Get enums for <built-in function qErrnoWarning>
Get enums for <built-in function qDebug>
Get enums for <built-in function qCritical>
Get enums for <built-in function pyqtRestoreInputHook>
Get enums for <built-in function pyqtRemoveInputHook>
Get enums for <built-in function qAddPreRoutine>
Get enums for <built-in function qRemovePostRoutine>
Get enums for <built-in function qAddPostRoutine>
Get enums for <built-in function qChecksum>
Get enums for <built-in function qUncompress>
Get enums for <built-in function qCompress>
Get enums for <built-in function qEnvironmentVariable>
Get enums for <built-in function pyqtPickleProtocol>
Get enums for <built-in function pyqtSetPickleProtocol>
Get enums for <built-in function qrand>
Get enums for <built-in function qsrand>
Get enums for <built-in function qIsNull>
Get enums for <built-in function qFuzzyCompare>
Get enums for <built-in function qUnregisterResourceData>
Get enums for <built-in function qRegisterResourceData>
Get enums for <built-in function qSharedBuild>
Get enums for <built-in function qVersion>
Get enums for <built-in function qRound64>
Get enums for <built-in function qRound>
Get enums for <built-in function qAbs>
Get enums for <class 'PyQt5.QtCore.QObject'>
Get enums for <class 'PyQt5.QtCore.QAbstractAnimation'>
<class 'PyQt5.QtCore.QAbstractAnimation.DeletionPolicy'>
<class 'PyQt5.QtCore.QAbstractAnimation.Direction'>
<class 'PyQt5.QtCore.QAbstractAnimation.State'>
Get enums for <class 'PyQt5.QtCore.QAbstractEventDispatcher'>
<class 'PyQt5.QtCore.QAbstractEventDispatcher.TimerInfo'>
Get enums for <class 'PyQt5.QtCore.QAbstractItemModel'>
<class 'PyQt5.QtCore.QAbstractItemModel.CheckIndexOptions'>
<class 'PyQt5.QtCore.QAbstractItemModel.LayoutChangeHint'>
Get enums for <class 'PyQt5.QtCore.QAbstractListModel'>
Get enums for <class 'PyQt5.QtCore.QAbstractNativeEventFilter'>
Get enums for <class 'PyQt5.QtCore.QAbstractProxyModel'>
Get enums for <class 'PyQt5.QtCore.QAbstractState'>
Get enums for <class 'PyQt5.QtCore.QAbstractTableModel'>
Get enums for <class 'PyQt5.QtCore.QAbstractTransition'>
<class 'PyQt5.QtCore.QAbstractTransition.TransitionType'>
Get enums for <class 'PyQt5.QtCore.QAnimationGroup'>
Get enums for <class 'PyQt5.QtCore.QBasicTimer'>
Get enums for <class 'PyQt5.QtCore.QBitArray'>
Get enums for <class 'PyQt5.QtCore.QIODevice'>
<class 'PyQt5.QtCore.QIODevice.OpenMode'>
<class 'PyQt5.QtCore.QIODevice.OpenModeFlag'>
Get enums for <class 'PyQt5.QtCore.QBuffer'>
Get enums for <class 'PyQt5.QtCore.QByteArray'>
<class 'PyQt5.QtCore.QByteArray.Base64Option'>
<class 'PyQt5.QtCore.QByteArray.Base64Options'>
<class 'PyQt5.QtCore.QByteArray.FromBase64Result'>
Get enums for <class 'PyQt5.QtCore.QByteArrayMatcher'>
Get enums for <class 'PyQt5.QtCore.QCalendar'>
<class 'PyQt5.QtCore.QCalendar.YearMonthDay'>
Get enums for <class 'PyQt5.QtCore.QCborError'>
<class 'PyQt5.QtCore.QCborError.Code'>
Get enums for <enum 'QCborKnownTags'>
<class 'int'>
Get enums for <enum 'QCborSimpleType'>
<class 'int'>
Get enums for <class 'PyQt5.QtCore.QCborStreamReader'>
<class 'PyQt5.QtCore.QCborStreamReader.StringResultCode'>
<class 'PyQt5.QtCore.QCborStreamReader.Type'>
Get enums for <class 'PyQt5.QtCore.QCborStreamWriter'>
Get enums for <class 'PyQt5.QtCore.QEvent'>
<class 'PyQt5.QtCore.QEvent.Type'>
Get enums for <class 'PyQt5.QtCore.QChildEvent'>
Get enums for <class 'PyQt5.QtCore.QCollator'>
Get enums for <class 'PyQt5.QtCore.QCollatorSortKey'>
Get enums for <class 'PyQt5.QtCore.QCommandLineOption'>
<class 'PyQt5.QtCore.QCommandLineOption.Flag'>
<class 'PyQt5.QtCore.QCommandLineOption.Flags'>
Get enums for <class 'PyQt5.QtCore.QCommandLineParser'>
<class 'PyQt5.QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode'>
<class 'PyQt5.QtCore.QCommandLineParser.SingleDashWordOptionMode'>
Get enums for <class 'PyQt5.QtCore.QConcatenateTablesProxyModel'>
Get enums for <class 'PyQt5.QtCore.QCoreApplication'>
Get enums for <class 'PyQt5.QtCore.QCryptographicHash'>
<class 'PyQt5.QtCore.QCryptographicHash.Algorithm'>
Get enums for <class 'PyQt5.QtCore.QDataStream'>
<class 'PyQt5.QtCore.QDataStream.ByteOrder'>
<class 'PyQt5.QtCore.QDataStream.FloatingPointPrecision'>
<class 'PyQt5.QtCore.QDataStream.Status'>
<class 'PyQt5.QtCore.QDataStream.Version'>
Get enums for <class 'PyQt5.QtCore.QDate'>
<class 'PyQt5.QtCore.QDate.MonthNameType'>
Get enums for <class 'PyQt5.QtCore.QDateTime'>
Get enums for <class 'PyQt5.QtCore.QDeadlineTimer'>
<class 'PyQt5.QtCore.QDeadlineTimer.ForeverConstant'>
Get enums for <class 'PyQt5.QtCore.QDir'>
<class 'PyQt5.QtCore.QDir.Filter'>
<class 'PyQt5.QtCore.QDir.Filters'>
<class 'PyQt5.QtCore.QDir.SortFlag'>
<class 'PyQt5.QtCore.QDir.SortFlags'>
Get enums for <class 'PyQt5.QtCore.QDirIterator'>
<class 'PyQt5.QtCore.QDirIterator.IteratorFlag'>
<class 'PyQt5.QtCore.QDirIterator.IteratorFlags'>
Get enums for <class 'PyQt5.QtCore.QDynamicPropertyChangeEvent'>
Get enums for <class 'PyQt5.QtCore.QEasingCurve'>
<class 'PyQt5.QtCore.QEasingCurve.Type'>
Get enums for <class 'PyQt5.QtCore.QElapsedTimer'>
<class 'PyQt5.QtCore.QElapsedTimer.ClockType'>
Get enums for <class 'PyQt5.QtCore.QEventLoop'>
<class 'PyQt5.QtCore.QEventLoop.ProcessEventsFlag'>
<class 'PyQt5.QtCore.QEventLoop.ProcessEventsFlags'>
Get enums for <class 'PyQt5.QtCore.QEventLoopLocker'>
Get enums for <class 'PyQt5.QtCore.QEventTransition'>
Get enums for <class 'PyQt5.QtCore.QFileDevice'>
<class 'PyQt5.QtCore.QFileDevice.FileError'>
<class 'PyQt5.QtCore.QFileDevice.FileHandleFlag'>
<class 'PyQt5.QtCore.QFileDevice.FileHandleFlags'>
<class 'PyQt5.QtCore.QFileDevice.FileTime'>
<class 'PyQt5.QtCore.QFileDevice.MemoryMapFlags'>
<class 'PyQt5.QtCore.QFileDevice.Permission'>
<class 'PyQt5.QtCore.QFileDevice.Permissions'>
Get enums for <class 'PyQt5.QtCore.QFile'>
Get enums for <class 'PyQt5.QtCore.QFileInfo'>
Get enums for <class 'PyQt5.QtCore.QFileSelector'>
Get enums for <class 'PyQt5.QtCore.QFileSystemWatcher'>
Get enums for <class 'PyQt5.QtCore.QFinalState'>
Get enums for <class 'PyQt5.QtCore.QGenericArgument'>
Get enums for <class 'PyQt5.QtCore.QGenericReturnArgument'>
Get enums for <class 'PyQt5.QtCore.QHistoryState'>
<class 'PyQt5.QtCore.QHistoryState.HistoryType'>
Get enums for <class 'PyQt5.QtCore.QIdentityProxyModel'>
Get enums for <class 'PyQt5.QtCore.QItemSelection'>
Get enums for <class 'PyQt5.QtCore.QItemSelectionModel'>
<class 'PyQt5.QtCore.QItemSelectionModel.SelectionFlag'>
<class 'PyQt5.QtCore.QItemSelectionModel.SelectionFlags'>
Get enums for <class 'PyQt5.QtCore.QItemSelectionRange'>
Get enums for <class 'PyQt5.QtCore.QJsonDocument'>
<class 'PyQt5.QtCore.QJsonDocument.DataValidation'>
<class 'PyQt5.QtCore.QJsonDocument.JsonFormat'>
Get enums for <class 'PyQt5.QtCore.QJsonParseError'>
<class 'PyQt5.QtCore.QJsonParseError.ParseError'>
Get enums for <class 'PyQt5.QtCore.QJsonValue'>
<class 'PyQt5.QtCore.QJsonValue.Type'>
Get enums for <class 'PyQt5.QtCore.QLibrary'>
<class 'PyQt5.QtCore.QLibrary.LoadHint'>
<class 'PyQt5.QtCore.QLibrary.LoadHints'>
Get enums for <class 'PyQt5.QtCore.QLibraryInfo'>
<class 'PyQt5.QtCore.QLibraryInfo.LibraryLocation'>
Get enums for <class 'PyQt5.QtCore.QLine'>
Get enums for <class 'PyQt5.QtCore.QLineF'>
<class 'PyQt5.QtCore.QLineF.IntersectType'>
Get enums for <class 'PyQt5.QtCore.QLocale'>
<class 'PyQt5.QtCore.QLocale.Country'>
<class 'PyQt5.QtCore.QLocale.CurrencySymbolFormat'>
<class 'PyQt5.QtCore.QLocale.DataSizeFormat'>
<class 'PyQt5.QtCore.QLocale.DataSizeFormats'>
<class 'PyQt5.QtCore.QLocale.FloatingPointPrecisionOption'>
<class 'PyQt5.QtCore.QLocale.FormatType'>
<class 'PyQt5.QtCore.QLocale.Language'>
<class 'PyQt5.QtCore.QLocale.MeasurementSystem'>
<class 'PyQt5.QtCore.QLocale.NumberOption'>
<class 'PyQt5.QtCore.QLocale.NumberOptions'>
<class 'PyQt5.QtCore.QLocale.QuotationStyle'>
<class 'PyQt5.QtCore.QLocale.Script'>
Get enums for <class 'PyQt5.QtCore.QLockFile'>
<class 'PyQt5.QtCore.QLockFile.LockError'>
Get enums for <class 'PyQt5.QtCore.QLoggingCategory'>
Get enums for <class 'PyQt5.QtCore.QMargins'>
Get enums for <class 'PyQt5.QtCore.QMarginsF'>
Get enums for <class 'PyQt5.QtCore.QMessageAuthenticationCode'>
Get enums for <class 'PyQt5.QtCore.QMessageLogContext'>
Get enums for <class 'PyQt5.QtCore.QMessageLogger'>
Get enums for <class 'PyQt5.QtCore.QMetaClassInfo'>
Get enums for <class 'PyQt5.QtCore.QMetaEnum'>
Get enums for <class 'PyQt5.QtCore.QMetaMethod'>
<class 'PyQt5.QtCore.QMetaMethod.Access'>
<class 'PyQt5.QtCore.QMetaMethod.MethodType'>
Get enums for <class 'PyQt5.QtCore.QMetaObject'>
<class 'PyQt5.QtCore.QMetaObject.Connection'>
Get enums for <class 'PyQt5.QtCore.QMetaProperty'>
Get enums for <class 'PyQt5.QtCore.QMetaType'>
<class 'PyQt5.QtCore.QMetaType.Type'>
<class 'PyQt5.QtCore.QMetaType.TypeFlag'>
<class 'PyQt5.QtCore.QMetaType.TypeFlags'>
Get enums for <class 'PyQt5.QtCore.QMimeData'>
Get enums for <class 'PyQt5.QtCore.QMimeDatabase'>
<class 'PyQt5.QtCore.QMimeDatabase.MatchMode'>
Get enums for <class 'PyQt5.QtCore.QMimeType'>
Get enums for <class 'PyQt5.QtCore.QModelIndex'>
Get enums for <class 'PyQt5.QtCore.QMutex'>
<class 'PyQt5.QtCore.QMutex.RecursionMode'>
Get enums for <class 'PyQt5.QtCore.QMutexLocker'>
Get enums for <class 'PyQt5.QtCore.QObjectCleanupHandler'>
Get enums for <class 'PyQt5.QtCore.QOperatingSystemVersion'>
<class 'PyQt5.QtCore.QOperatingSystemVersion.OSType'>
Get enums for <class 'PyQt5.QtCore.QParallelAnimationGroup'>
Get enums for <class 'PyQt5.QtCore.QPauseAnimation'>
Get enums for <class 'PyQt5.QtCore.QPersistentModelIndex'>
Get enums for <class 'PyQt5.QtCore.QPluginLoader'>
Get enums for <class 'PyQt5.QtCore.QPoint'>
Get enums for <class 'PyQt5.QtCore.QPointF'>
Get enums for <class 'PyQt5.QtCore.QProcess'>
<class 'PyQt5.QtCore.QProcess.ExitStatus'>
<class 'PyQt5.QtCore.QProcess.InputChannelMode'>
<class 'PyQt5.QtCore.QProcess.ProcessChannel'>
<class 'PyQt5.QtCore.QProcess.ProcessChannelMode'>
<class 'PyQt5.QtCore.QProcess.ProcessError'>
<class 'PyQt5.QtCore.QProcess.ProcessState'>
Get enums for <class 'PyQt5.QtCore.QProcessEnvironment'>
Get enums for <class 'PyQt5.QtCore.QVariantAnimation'>
Get enums for <class 'PyQt5.QtCore.QPropertyAnimation'>
Get enums for <class 'PyQt5.QtCore.QRandomGenerator'>
Get enums for <class 'PyQt5.QtCore.QReadLocker'>
Get enums for <class 'PyQt5.QtCore.QReadWriteLock'>
<class 'PyQt5.QtCore.QReadWriteLock.RecursionMode'>
Get enums for <class 'PyQt5.QtCore.QRect'>
Get enums for <class 'PyQt5.QtCore.QRectF'>
Get enums for <class 'PyQt5.QtCore.QRecursiveMutex'>
Get enums for <class 'PyQt5.QtCore.QRegExp'>
<class 'PyQt5.QtCore.QRegExp.CaretMode'>
<class 'PyQt5.QtCore.QRegExp.PatternSyntax'>
Get enums for <class 'PyQt5.QtCore.QRegularExpression'>
<class 'PyQt5.QtCore.QRegularExpression.MatchOption'>
<class 'PyQt5.QtCore.QRegularExpression.MatchOptions'>
<class 'PyQt5.QtCore.QRegularExpression.MatchType'>
<class 'PyQt5.QtCore.QRegularExpression.PatternOption'>
<class 'PyQt5.QtCore.QRegularExpression.PatternOptions'>
Get enums for <class 'PyQt5.QtCore.QRegularExpressionMatch'>
Get enums for <class 'PyQt5.QtCore.QRegularExpressionMatchIterator'>
Get enums for <class 'PyQt5.QtCore.QResource'>
<class 'PyQt5.QtCore.QResource.Compression'>
Get enums for <class 'PyQt5.QtCore.QRunnable'>
Get enums for <class 'PyQt5.QtCore.QSaveFile'>
Get enums for <class 'PyQt5.QtCore.QSemaphore'>
Get enums for <class 'PyQt5.QtCore.QSemaphoreReleaser'>
Get enums for <class 'PyQt5.QtCore.QSequentialAnimationGroup'>
Get enums for <class 'PyQt5.QtCore.QSettings'>
<class 'PyQt5.QtCore.QSettings.Format'>
<class 'PyQt5.QtCore.QSettings.Scope'>
<class 'PyQt5.QtCore.QSettings.Status'>
Get enums for <class 'PyQt5.QtCore.QSharedMemory'>
<class 'PyQt5.QtCore.QSharedMemory.AccessMode'>
<class 'PyQt5.QtCore.QSharedMemory.SharedMemoryError'>
Get enums for <class 'PyQt5.QtCore.QSignalBlocker'>
Get enums for <class 'PyQt5.QtCore.QSignalMapper'>
Get enums for <class 'PyQt5.QtCore.QSignalTransition'>
Get enums for <class 'PyQt5.QtCore.QSize'>
Get enums for <class 'PyQt5.QtCore.QSizeF'>
Get enums for <class 'PyQt5.QtCore.QSocketNotifier'>
<class 'PyQt5.QtCore.QSocketNotifier.Type'>
Get enums for <class 'PyQt5.QtCore.QSortFilterProxyModel'>
Get enums for <class 'PyQt5.QtCore.QStandardPaths'>
<class 'PyQt5.QtCore.QStandardPaths.LocateOption'>
<class 'PyQt5.QtCore.QStandardPaths.LocateOptions'>
<class 'PyQt5.QtCore.QStandardPaths.StandardLocation'>
Get enums for <class 'PyQt5.QtCore.QState'>
<class 'PyQt5.QtCore.QState.ChildMode'>
<class 'PyQt5.QtCore.QState.RestorePolicy'>
Get enums for <class 'PyQt5.QtCore.QStateMachine'>
<class 'PyQt5.QtCore.QStateMachine.Error'>
<class 'PyQt5.QtCore.QStateMachine.EventPriority'>
<class 'PyQt5.QtCore.QStateMachine.SignalEvent'>
<class 'PyQt5.QtCore.QStateMachine.WrappedEvent'>
Get enums for <class 'PyQt5.QtCore.QStorageInfo'>
Get enums for <class 'PyQt5.QtCore.QStringListModel'>
Get enums for <class 'PyQt5.QtCore.QSysInfo'>
<class 'PyQt5.QtCore.QSysInfo.Endian'>
<class 'PyQt5.QtCore.QSysInfo.Sizes'>
<class 'PyQt5.QtCore.QSysInfo.WinVersion'>
Get enums for <class 'PyQt5.QtCore.QSystemSemaphore'>
<class 'PyQt5.QtCore.QSystemSemaphore.AccessMode'>
<class 'PyQt5.QtCore.QSystemSemaphore.SystemSemaphoreError'>
Get enums for <class 'PyQt5.QtCore.QTemporaryDir'>
Get enums for <class 'PyQt5.QtCore.QTemporaryFile'>
Get enums for <class 'PyQt5.QtCore.QTextBoundaryFinder'>
<class 'PyQt5.QtCore.QTextBoundaryFinder.BoundaryReason'>
<class 'PyQt5.QtCore.QTextBoundaryFinder.BoundaryReasons'>
<class 'PyQt5.QtCore.QTextBoundaryFinder.BoundaryType'>
Get enums for <class 'PyQt5.QtCore.QTextCodec'>
<class 'PyQt5.QtCore.QTextCodec.ConversionFlag'>
<class 'PyQt5.QtCore.QTextCodec.ConversionFlags'>
<class 'PyQt5.QtCore.QTextCodec.ConverterState'>
Get enums for <class 'PyQt5.QtCore.QTextDecoder'>
Get enums for <class 'PyQt5.QtCore.QTextEncoder'>
Get enums for <class 'PyQt5.QtCore.QTextStream'>
<class 'PyQt5.QtCore.QTextStream.FieldAlignment'>
<class 'PyQt5.QtCore.QTextStream.NumberFlag'>
<class 'PyQt5.QtCore.QTextStream.NumberFlags'>
<class 'PyQt5.QtCore.QTextStream.RealNumberNotation'>
<class 'PyQt5.QtCore.QTextStream.Status'>
Get enums for <class 'PyQt5.QtCore.QTextStreamManipulator'>
Get enums for <class 'PyQt5.QtCore.QThread'>
<class 'PyQt5.QtCore.QThread.Priority'>
Get enums for <class 'PyQt5.QtCore.QThreadPool'>
Get enums for <class 'PyQt5.QtCore.QTime'>
Get enums for <class 'PyQt5.QtCore.QTimeLine'>
<class 'PyQt5.QtCore.QTimeLine.CurveShape'>
<class 'PyQt5.QtCore.QTimeLine.Direction'>
<class 'PyQt5.QtCore.QTimeLine.State'>
Get enums for <class 'PyQt5.QtCore.QTimeZone'>
<class 'PyQt5.QtCore.QTimeZone.NameType'>
<class 'PyQt5.QtCore.QTimeZone.OffsetData'>
<class 'PyQt5.QtCore.QTimeZone.TimeType'>
Get enums for <class 'PyQt5.QtCore.QTimer'>
Get enums for <class 'PyQt5.QtCore.QTimerEvent'>
Get enums for <class 'PyQt5.QtCore.QTranslator'>
Get enums for <class 'PyQt5.QtCore.QTransposeProxyModel'>
Get enums for <class 'PyQt5.QtCore.QUrl'>
<class 'PyQt5.QtCore.QUrl.ComponentFormattingOption'>
<class 'PyQt5.QtCore.QUrl.ComponentFormattingOptions'>
<class 'PyQt5.QtCore.QUrl.FormattingOptions'>
<class 'PyQt5.QtCore.QUrl.ParsingMode'>
<class 'PyQt5.QtCore.QUrl.UrlFormattingOption'>
<class 'PyQt5.QtCore.QUrl.UserInputResolutionOption'>
<class 'PyQt5.QtCore.QUrl.UserInputResolutionOptions'>
Get enums for <class 'PyQt5.QtCore.QUrlQuery'>
Get enums for <class 'PyQt5.QtCore.QUuid'>
<class 'PyQt5.QtCore.QUuid.StringFormat'>
<class 'PyQt5.QtCore.QUuid.Variant'>
<class 'PyQt5.QtCore.QUuid.Version'>
Get enums for <class 'PyQt5.QtCore.QVariant'>
<class 'PyQt5.QtCore.QVariant.Type'>
Get enums for <class 'PyQt5.QtCore.QVersionNumber'>
Get enums for <class 'PyQt5.QtCore.QWaitCondition'>
Get enums for <class 'PyQt5.QtCore.QWinEventNotifier'>
Get enums for <class 'PyQt5.QtCore.QWriteLocker'>
Get enums for <class 'PyQt5.QtCore.QXmlStreamAttribute'>
Get enums for <class 'PyQt5.QtCore.QXmlStreamAttributes'>
Get enums for <class 'PyQt5.QtCore.QXmlStreamEntityDeclaration'>
Get enums for <class 'PyQt5.QtCore.QXmlStreamEntityResolver'>
Get enums for <class 'PyQt5.QtCore.QXmlStreamNamespaceDeclaration'>
Get enums for <class 'PyQt5.QtCore.QXmlStreamNotationDeclaration'>
Get enums for <class 'PyQt5.QtCore.QXmlStreamReader'>
<class 'PyQt5.QtCore.QXmlStreamReader.Error'>
<class 'PyQt5.QtCore.QXmlStreamReader.ReadElementTextBehaviour'>
<class 'PyQt5.QtCore.QXmlStreamReader.TokenType'>
Get enums for <class 'PyQt5.QtCore.QXmlStreamWriter'>
Get enums for <class 'PyQt5.QtCore.Qt'>
<class 'PyQt5.QtCore.Qt.Alignment'>
<class 'PyQt5.QtCore.Qt.AlignmentFlag'>
<class 'PyQt5.QtCore.Qt.AnchorPoint'>
<class 'PyQt5.QtCore.Qt.ApplicationAttribute'>
<class 'PyQt5.QtCore.Qt.ApplicationState'>
<class 'PyQt5.QtCore.Qt.ApplicationStates'>
<class 'PyQt5.QtCore.Qt.ArrowType'>
<class 'PyQt5.QtCore.Qt.AspectRatioMode'>
<class 'PyQt5.QtCore.Qt.Axis'>
<class 'PyQt5.QtCore.Qt.BGMode'>
<class 'PyQt5.QtCore.Qt.BrushStyle'>
<class 'PyQt5.QtCore.Qt.CaseSensitivity'>
<class 'PyQt5.QtCore.Qt.CheckState'>
<class 'PyQt5.QtCore.Qt.ChecksumType'>
<class 'PyQt5.QtCore.Qt.ClipOperation'>
<class 'PyQt5.QtCore.Qt.ConnectionType'>
<class 'PyQt5.QtCore.Qt.ContextMenuPolicy'>
<class 'PyQt5.QtCore.Qt.CoordinateSystem'>
<class 'PyQt5.QtCore.Qt.Corner'>
<class 'PyQt5.QtCore.Qt.CursorMoveStyle'>
<class 'PyQt5.QtCore.Qt.CursorShape'>
<class 'PyQt5.QtCore.Qt.DateFormat'>
<class 'PyQt5.QtCore.Qt.DayOfWeek'>
<class 'PyQt5.QtCore.Qt.DockWidgetArea'>
<class 'PyQt5.QtCore.Qt.DockWidgetAreas'>
<class 'PyQt5.QtCore.Qt.DropAction'>
<class 'PyQt5.QtCore.Qt.DropActions'>
<class 'PyQt5.QtCore.Qt.Edge'>
<class 'PyQt5.QtCore.Qt.Edges'>
<class 'PyQt5.QtCore.Qt.EnterKeyType'>
<class 'PyQt5.QtCore.Qt.EventPriority'>
<class 'PyQt5.QtCore.Qt.FillRule'>
<class 'PyQt5.QtCore.Qt.FindChildOption'>
<class 'PyQt5.QtCore.Qt.FindChildOptions'>
<class 'PyQt5.QtCore.Qt.FocusPolicy'>
<class 'PyQt5.QtCore.Qt.FocusReason'>
<class 'PyQt5.QtCore.Qt.GestureFlag'>
<class 'PyQt5.QtCore.Qt.GestureFlags'>
<class 'PyQt5.QtCore.Qt.GestureState'>
<class 'PyQt5.QtCore.Qt.GestureType'>
<class 'PyQt5.QtCore.Qt.GlobalColor'>
<class 'PyQt5.QtCore.Qt.HitTestAccuracy'>
<class 'PyQt5.QtCore.Qt.ImageConversionFlag'>
<class 'PyQt5.QtCore.Qt.ImageConversionFlags'>
<class 'PyQt5.QtCore.Qt.InputMethodHint'>
<class 'PyQt5.QtCore.Qt.InputMethodHints'>
<class 'PyQt5.QtCore.Qt.InputMethodQueries'>
<class 'PyQt5.QtCore.Qt.InputMethodQuery'>
<class 'PyQt5.QtCore.Qt.ItemDataRole'>
<class 'PyQt5.QtCore.Qt.ItemFlag'>
<class 'PyQt5.QtCore.Qt.ItemFlags'>
<class 'PyQt5.QtCore.Qt.ItemSelectionMode'>
<class 'PyQt5.QtCore.Qt.ItemSelectionOperation'>
<class 'PyQt5.QtCore.Qt.Key'>
<class 'PyQt5.QtCore.Qt.KeyboardModifier'>
<class 'PyQt5.QtCore.Qt.KeyboardModifiers'>
<class 'PyQt5.QtCore.Qt.LayoutDirection'>
<class 'PyQt5.QtCore.Qt.MaskMode'>
<class 'PyQt5.QtCore.Qt.MatchFlag'>
<class 'PyQt5.QtCore.Qt.MatchFlags'>
<class 'PyQt5.QtCore.Qt.Modifier'>
<class 'PyQt5.QtCore.Qt.MouseButton'>
<class 'PyQt5.QtCore.Qt.MouseButtons'>
<class 'PyQt5.QtCore.Qt.MouseEventFlag'>
<class 'PyQt5.QtCore.Qt.MouseEventFlags'>
<class 'PyQt5.QtCore.Qt.MouseEventSource'>
<class 'PyQt5.QtCore.Qt.NativeGestureType'>
<class 'PyQt5.QtCore.Qt.NavigationMode'>
<class 'PyQt5.QtCore.Qt.Orientation'>
<class 'PyQt5.QtCore.Qt.Orientations'>
<class 'PyQt5.QtCore.Qt.PenCapStyle'>
<class 'PyQt5.QtCore.Qt.PenJoinStyle'>
<class 'PyQt5.QtCore.Qt.PenStyle'>
<class 'PyQt5.QtCore.Qt.ScreenOrientation'>
<class 'PyQt5.QtCore.Qt.ScreenOrientations'>
<class 'PyQt5.QtCore.Qt.ScrollBarPolicy'>
<class 'PyQt5.QtCore.Qt.ScrollPhase'>
<class 'PyQt5.QtCore.Qt.ShortcutContext'>
<class 'PyQt5.QtCore.Qt.SizeHint'>
<class 'PyQt5.QtCore.Qt.SizeMode'>
<class 'PyQt5.QtCore.Qt.SortOrder'>
<class 'PyQt5.QtCore.Qt.TabFocusBehavior'>
<class 'PyQt5.QtCore.Qt.TextElideMode'>
<class 'PyQt5.QtCore.Qt.TextFlag'>
<class 'PyQt5.QtCore.Qt.TextFormat'>
<class 'PyQt5.QtCore.Qt.TextInteractionFlag'>
<class 'PyQt5.QtCore.Qt.TextInteractionFlags'>
<class 'PyQt5.QtCore.Qt.TileRule'>
<class 'PyQt5.QtCore.Qt.TimeSpec'>
<class 'PyQt5.QtCore.Qt.TimerType'>
<class 'PyQt5.QtCore.Qt.ToolBarArea'>
<class 'PyQt5.QtCore.Qt.ToolBarAreas'>
<class 'PyQt5.QtCore.Qt.ToolButtonStyle'>
<class 'PyQt5.QtCore.Qt.TouchPointState'>
<class 'PyQt5.QtCore.Qt.TouchPointStates'>
<class 'PyQt5.QtCore.Qt.TransformationMode'>
<class 'PyQt5.QtCore.Qt.UIEffect'>
<class 'PyQt5.QtCore.Qt.WhiteSpaceMode'>
<class 'PyQt5.QtCore.Qt.WidgetAttribute'>
<class 'PyQt5.QtCore.Qt.WindowFlags'>
<class 'PyQt5.QtCore.Qt.WindowFrameSection'>
<class 'PyQt5.QtCore.Qt.WindowModality'>
<class 'PyQt5.QtCore.Qt.WindowState'>
<class 'PyQt5.QtCore.Qt.WindowStates'>
<class 'PyQt5.QtCore.Qt.WindowType'>
Get enums for <class 'PyQt5.QtCore.QtMsgType'>
Get enums for 2
Get enums for 0
Get enums for 3
Get enums for 4
Get enums for 2
Get enums for 1
Get enums for 5.15.10
Get enums for 5.15.13
Get enums for 331530
Get enums for 331533
Get enums for <class 'PyQt5.QtCore.pyqtProperty'>
Get enums for <class 'PyQt5.QtCore.pyqtSignal'>
Get enums for <class 'PyQt5.QtCore.pyqtBoundSignal'>
Get enums for {'sip_flags': '-n PyQt5.sip -t Qt_5_15_13 -t WS_WIN'}
Get enums for <class 'method'>
Get enums for <slot wrapper '__repr__' of 'object' objects>
Get enums for <slot wrapper '__eq__' of 'QVariant' objects>
Get enums for <slot wrapper '__ne__' of 'QVariant' objects>
Get enums for None
Get enums for <function __bool__ at 0x000001FA216F2AC0>
Get enums for <function __repr__ at 0x000001FA21720F40>
Get enums for <function __eq__ at 0x000001FA21720FE0>
Get enums for <function __ne__ at 0x000001FA21721080>
Get enums for <function __hash__ at 0x000001FA21721120>
Get enums for NULL
Get enums for PyQt6.QtGui
Get enums for None
Get enums for PyQt6
Get enums for <_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD0CC20>
Get enums for ModuleSpec(name='PyQt6.QtGui', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD0CC20>, origin='D:\\_QGIS\\PLUGINS\\isl_box\\.venv\\Lib\\site-packages\\PyQt6\\QtGui.pyd')
Get enums for <built-in function qGray>
Get enums for <built-in function qRgba>
Get enums for <built-in function qRgb>
Get enums for <built-in function qAlpha>
Get enums for <built-in function qBlue>
Get enums for <built-in function qGreen>
Get enums for <built-in function qRed>
Get enums for <built-in function qUnpremultiply>
Get enums for <built-in function qPremultiply>
Get enums for <built-in function qRgba64>
Get enums for <built-in function qPixelFormatAlpha>
Get enums for <built-in function qPixelFormatYuv>
Get enums for <built-in function qPixelFormatHsv>
Get enums for <built-in function qPixelFormatHsl>
Get enums for <built-in function qPixelFormatCmyk>
Get enums for <built-in function qPixelFormatGrayscale>
Get enums for <built-in function qPixelFormatRgba>
Get enums for <built-in function qFuzzyCompare>
Get enums for <built-in function qt_set_sequence_auto_mnemonic>
Get enums for <class 'PyQt6.QtGui.QAbstractFileIconProvider'>
Get enums for <class 'PyQt6.QtGui.QAbstractTextDocumentLayout'>
<class 'PyQt6.QtGui.QAbstractTextDocumentLayout.PaintContext'>
<class 'PyQt6.QtGui.QAbstractTextDocumentLayout.Selection'>
Get enums for <class 'PyQt6.QtGui.QAction'>
Get enums for <class 'PyQt6.QtGui.QActionEvent'>
Get enums for <class 'PyQt6.QtGui.QActionGroup'>
Get enums for <class 'PyQt6.QtGui.QBackingStore'>
Get enums for <class 'PyQt6.QtGui.QPaintDevice'>
Get enums for <class 'PyQt6.QtGui.QPixmap'>
Get enums for <class 'PyQt6.QtGui.QBitmap'>
Get enums for <class 'PyQt6.QtGui.QBrush'>
Get enums for <class 'PyQt6.QtGui.QChildWindowEvent'>
Get enums for <class 'PyQt6.QtGui.QClipboard'>
Get enums for <class 'PyQt6.QtGui.QCloseEvent'>
Get enums for <class 'PyQt6.QtGui.QColor'>
Get enums for <class 'PyQt6.QtGui.QColorConstants'>
<class 'PyQt6.QtGui.QColorConstants.Svg'>
Get enums for <class 'PyQt6.QtGui.QColorSpace'>
Get enums for <class 'PyQt6.QtGui.QColorTransform'>
Get enums for <class 'PyQt6.QtGui.QGradient'>
Get enums for <class 'PyQt6.QtGui.QConicalGradient'>
Get enums for <class 'PyQt6.QtGui.QInputEvent'>
Get enums for <class 'PyQt6.QtGui.QContextMenuEvent'>
Get enums for <class 'PyQt6.QtGui.QCursor'>
Get enums for <class 'PyQt6.QtGui.QDesktopServices'>
Get enums for <class 'PyQt6.QtGui.QValidator'>
Get enums for <class 'PyQt6.QtGui.QDoubleValidator'>
Get enums for <class 'PyQt6.QtGui.QDrag'>
Get enums for <class 'PyQt6.QtGui.QDropEvent'>
Get enums for <class 'PyQt6.QtGui.QDragMoveEvent'>
Get enums for <class 'PyQt6.QtGui.QDragEnterEvent'>
Get enums for <class 'PyQt6.QtGui.QDragLeaveEvent'>
Get enums for <class 'PyQt6.QtGui.QPointerEvent'>
Get enums for <class 'PyQt6.QtGui.QSinglePointEvent'>
Get enums for <class 'PyQt6.QtGui.QEnterEvent'>
Get enums for <class 'PyQt6.QtGui.QEventPoint'>
Get enums for <class 'PyQt6.QtGui.QExposeEvent'>
Get enums for <class 'PyQt6.QtGui.QFileOpenEvent'>
Get enums for <class 'PyQt6.QtGui.QFileSystemModel'>
Get enums for <class 'PyQt6.QtGui.QFocusEvent'>
Get enums for <class 'PyQt6.QtGui.QFont'>
<class 'PyQt6.QtGui.QFont.Tag'>
Get enums for <class 'PyQt6.QtGui.QFontDatabase'>
Get enums for <class 'PyQt6.QtGui.QFontInfo'>
Get enums for <class 'PyQt6.QtGui.QFontMetrics'>
Get enums for <class 'PyQt6.QtGui.QFontMetricsF'>
Get enums for <class 'PyQt6.QtGui.QGlyphRun'>
Get enums for <class 'PyQt6.QtGui.QGuiApplication'>
Get enums for <class 'PyQt6.QtGui.QHelpEvent'>
Get enums for <class 'PyQt6.QtGui.QHideEvent'>
Get enums for <class 'PyQt6.QtGui.QHoverEvent'>
Get enums for <class 'PyQt6.QtGui.QIcon'>
Get enums for <class 'PyQt6.QtGui.QIconDragEvent'>
Get enums for <class 'PyQt6.QtGui.QIconEngine'>
<class 'PyQt6.QtGui.QIconEngine.ScaledPixmapArgument'>
Get enums for <class 'PyQt6.QtGui.QImage'>
Get enums for <class 'PyQt6.QtGui.QImageIOHandler'>
Get enums for <class 'PyQt6.QtGui.QImageReader'>
Get enums for <class 'PyQt6.QtGui.QImageWriter'>
Get enums for <class 'PyQt6.QtGui.QInputDevice'>
Get enums for <class 'PyQt6.QtGui.QInputMethod'>
Get enums for <class 'PyQt6.QtGui.QInputMethodEvent'>
<class 'PyQt6.QtGui.QInputMethodEvent.Attribute'>
Get enums for <class 'PyQt6.QtGui.QInputMethodQueryEvent'>
Get enums for <class 'PyQt6.QtGui.QIntValidator'>
Get enums for <class 'PyQt6.QtGui.QKeyEvent'>
Get enums for <class 'PyQt6.QtGui.QKeySequence'>
Get enums for <class 'PyQt6.QtGui.QLinearGradient'>
Get enums for <class 'PyQt6.QtGui.QMatrix2x2'>
Get enums for <class 'PyQt6.QtGui.QMatrix2x3'>
Get enums for <class 'PyQt6.QtGui.QMatrix2x4'>
Get enums for <class 'PyQt6.QtGui.QMatrix3x2'>
Get enums for <class 'PyQt6.QtGui.QMatrix3x3'>
Get enums for <class 'PyQt6.QtGui.QMatrix3x4'>
Get enums for <class 'PyQt6.QtGui.QMatrix4x2'>
Get enums for <class 'PyQt6.QtGui.QMatrix4x3'>
Get enums for <class 'PyQt6.QtGui.QMatrix4x4'>
Get enums for <class 'PyQt6.QtGui.QMouseEvent'>
Get enums for <class 'PyQt6.QtGui.QMoveEvent'>
Get enums for <class 'PyQt6.QtGui.QMovie'>
Get enums for <class 'PyQt6.QtGui.QNativeGestureEvent'>
Get enums for <class 'PyQt6.QtGui.QSurface'>
Get enums for <class 'PyQt6.QtGui.QOffscreenSurface'>
Get enums for <class 'PyQt6.QtGui.QOpenGLContext'>
Get enums for <class 'PyQt6.QtGui.QOpenGLContextGroup'>
Get enums for <class 'PyQt6.QtGui.QPageLayout'>
Get enums for <class 'PyQt6.QtGui.QPageRanges'>
<class 'PyQt6.QtGui.QPageRanges.Range'>
Get enums for <class 'PyQt6.QtGui.QPageSize'>
Get enums for <class 'PyQt6.QtGui.QPagedPaintDevice'>
Get enums for <class 'PyQt6.QtGui.QWindow'>
Get enums for <class 'PyQt6.QtGui.QPaintDeviceWindow'>
Get enums for <class 'PyQt6.QtGui.QPaintEngine'>
Get enums for <class 'PyQt6.QtGui.QPaintEngineState'>
Get enums for <class 'PyQt6.QtGui.QPaintEvent'>
Get enums for <class 'PyQt6.QtGui.QPainter'>
<class 'PyQt6.QtGui.QPainter.PixmapFragment'>
Get enums for <class 'PyQt6.QtGui.QPainterPath'>
<class 'PyQt6.QtGui.QPainterPath.Element'>
Get enums for <class 'PyQt6.QtGui.QPainterPathStroker'>
Get enums for <class 'PyQt6.QtGui.QPalette'>
Get enums for <class 'PyQt6.QtGui.QPdfWriter'>
Get enums for <class 'PyQt6.QtGui.QPen'>
Get enums for <class 'PyQt6.QtGui.QPicture'>
Get enums for <class 'PyQt6.QtGui.QPixelFormat'>
Get enums for <class 'PyQt6.QtGui.QPixmapCache'>
<class 'PyQt6.QtGui.QPixmapCache.Key'>
Get enums for <class 'PyQt6.QtGui.QPlatformSurfaceEvent'>
Get enums for <class 'PyQt6.QtGui.QPointingDevice'>
Get enums for <class 'PyQt6.QtGui.QPointingDeviceUniqueId'>
Get enums for <class 'PyQt6.QtGui.QPolygon'>
Get enums for <class 'PyQt6.QtGui.QPolygonF'>
Get enums for <class 'PyQt6.QtGui.QQuaternion'>
Get enums for <class 'PyQt6.QtGui.QRadialGradient'>
Get enums for <class 'PyQt6.QtGui.QRasterWindow'>
Get enums for <class 'PyQt6.QtGui.QRawFont'>
Get enums for <class 'PyQt6.QtGui.QRegion'>
Get enums for <class 'PyQt6.QtGui.QRegularExpressionValidator'>
Get enums for <class 'PyQt6.QtGui.QResizeEvent'>
Get enums for <class 'PyQt6.QtGui.QRgba64'>
Get enums for <class 'PyQt6.QtGui.QScreen'>
Get enums for <class 'PyQt6.QtGui.QScrollEvent'>
Get enums for <class 'PyQt6.QtGui.QScrollPrepareEvent'>
Get enums for <class 'PyQt6.QtGui.QSessionManager'>
Get enums for <class 'PyQt6.QtGui.QShortcut'>
Get enums for <class 'PyQt6.QtGui.QShortcutEvent'>
Get enums for <class 'PyQt6.QtGui.QShowEvent'>
Get enums for <class 'PyQt6.QtGui.QStandardItem'>
Get enums for <class 'PyQt6.QtGui.QStandardItemModel'>
Get enums for <class 'PyQt6.QtGui.QStaticText'>
Get enums for <class 'PyQt6.QtGui.QStatusTipEvent'>
Get enums for <class 'PyQt6.QtGui.QStyleHints'>
Get enums for <class 'PyQt6.QtGui.QSurfaceFormat'>
Get enums for <class 'PyQt6.QtGui.QSyntaxHighlighter'>
Get enums for <class 'PyQt6.QtGui.QTabletEvent'>
Get enums for <class 'PyQt6.QtGui.QTextBlock'>
<class 'PyQt6.QtGui.QTextBlock.iterator'>
Get enums for <class 'PyQt6.QtGui.QTextFormat'>
Get enums for <class 'PyQt6.QtGui.QTextBlockFormat'>
Get enums for <class 'PyQt6.QtGui.QTextObject'>
Get enums for <class 'PyQt6.QtGui.QTextBlockGroup'>
Get enums for <class 'PyQt6.QtGui.QTextBlockUserData'>
Get enums for <class 'PyQt6.QtGui.QTextCharFormat'>
Get enums for <class 'PyQt6.QtGui.QTextCursor'>
Get enums for <class 'PyQt6.QtGui.QTextDocument'>
Get enums for <class 'PyQt6.QtGui.QTextDocumentFragment'>
Get enums for <class 'PyQt6.QtGui.QTextDocumentWriter'>
Get enums for <class 'PyQt6.QtGui.QTextFragment'>
Get enums for <class 'PyQt6.QtGui.QTextFrame'>
<class 'PyQt6.QtGui.QTextFrame.iterator'>
Get enums for <class 'PyQt6.QtGui.QTextFrameFormat'>
Get enums for <class 'PyQt6.QtGui.QTextImageFormat'>
Get enums for <class 'PyQt6.QtGui.QTextInlineObject'>
Get enums for <class 'PyQt6.QtGui.QTextItem'>
Get enums for <class 'PyQt6.QtGui.QTextLayout'>
<class 'PyQt6.QtGui.QTextLayout.FormatRange'>
Get enums for <class 'PyQt6.QtGui.QTextLength'>
Get enums for <class 'PyQt6.QtGui.QTextLine'>
Get enums for <class 'PyQt6.QtGui.QTextList'>
Get enums for <class 'PyQt6.QtGui.QTextListFormat'>
Get enums for <class 'PyQt6.QtGui.QTextObjectInterface'>
Get enums for <class 'PyQt6.QtGui.QTextOption'>
<class 'PyQt6.QtGui.QTextOption.Tab'>
Get enums for <class 'PyQt6.QtGui.QTextTable'>
Get enums for <class 'PyQt6.QtGui.QTextTableCell'>
Get enums for <class 'PyQt6.QtGui.QTextTableCellFormat'>
Get enums for <class 'PyQt6.QtGui.QTextTableFormat'>
Get enums for <class 'PyQt6.QtGui.QTouchEvent'>
Get enums for <class 'PyQt6.QtGui.QTransform'>
Get enums for <class 'PyQt6.QtGui.QUndoCommand'>
Get enums for <class 'PyQt6.QtGui.QUndoGroup'>
Get enums for <class 'PyQt6.QtGui.QUndoStack'>
Get enums for <class 'PyQt6.QtGui.QVector2D'>
Get enums for <class 'PyQt6.QtGui.QVector3D'>
Get enums for <class 'PyQt6.QtGui.QVector4D'>
Get enums for <class 'PyQt6.QtGui.QWhatsThisClickedEvent'>
Get enums for <class 'PyQt6.QtGui.QWheelEvent'>
Get enums for <class 'PyQt6.QtGui.QWindowStateChangeEvent'>
Get enums for D:\_QGIS\PLUGINS\isl_box\.venv\Lib\site-packages\PyQt6\QtGui.pyd
Get enums for PyQt6.QtWidgets
Get enums for None
Get enums for PyQt6
Get enums for <_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD0F230>
Get enums for ModuleSpec(name='PyQt6.QtWidgets', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD0F230>, origin='D:\\_QGIS\\PLUGINS\\isl_box\\.venv\\Lib\\site-packages\\PyQt6\\QtWidgets.pyd')
Get enums for <built-in function qDrawPlainRoundedRect>
Get enums for <built-in function qDrawBorderPixmap>
Get enums for <built-in function qDrawPlainRect>
Get enums for <built-in function qDrawWinPanel>
Get enums for <built-in function qDrawWinButton>
Get enums for <built-in function qDrawShadePanel>
Get enums for <built-in function qDrawShadeRect>
Get enums for <built-in function qDrawShadeLine>
Get enums for <class 'PyQt6.QtWidgets.QWidget'>
Get enums for <class 'PyQt6.QtWidgets.QAbstractButton'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsItem'>
Get enums for <class 'PyQt6.QtWidgets.QAbstractGraphicsShapeItem'>
Get enums for <class 'PyQt6.QtWidgets.QAbstractItemDelegate'>
Get enums for <class 'PyQt6.QtWidgets.QFrame'>
Get enums for <class 'PyQt6.QtWidgets.QAbstractScrollArea'>
Get enums for <class 'PyQt6.QtWidgets.QAbstractItemView'>
Get enums for <class 'PyQt6.QtWidgets.QAbstractSlider'>
Get enums for <class 'PyQt6.QtWidgets.QAbstractSpinBox'>
Get enums for <class 'PyQt6.QtWidgets.QApplication'>
Get enums for <class 'PyQt6.QtWidgets.QLayoutItem'>
Get enums for <class 'PyQt6.QtWidgets.QLayout'>
Get enums for <class 'PyQt6.QtWidgets.QBoxLayout'>
Get enums for <class 'PyQt6.QtWidgets.QButtonGroup'>
Get enums for <class 'PyQt6.QtWidgets.QCalendarWidget'>
Get enums for <class 'PyQt6.QtWidgets.QCheckBox'>
Get enums for <class 'PyQt6.QtWidgets.QDialog'>
Get enums for <class 'PyQt6.QtWidgets.QColorDialog'>
Get enums for <class 'PyQt6.QtWidgets.QColumnView'>
Get enums for <class 'PyQt6.QtWidgets.QComboBox'>
Get enums for <class 'PyQt6.QtWidgets.QPushButton'>
Get enums for <class 'PyQt6.QtWidgets.QCommandLinkButton'>
Get enums for <class 'PyQt6.QtWidgets.QStyle'>
Get enums for <class 'PyQt6.QtWidgets.QCommonStyle'>
Get enums for <class 'PyQt6.QtWidgets.QCompleter'>
Get enums for <class 'PyQt6.QtWidgets.QDataWidgetMapper'>
Get enums for <class 'PyQt6.QtWidgets.QDateTimeEdit'>
Get enums for <class 'PyQt6.QtWidgets.QDateEdit'>
Get enums for <class 'PyQt6.QtWidgets.QDial'>
Get enums for <class 'PyQt6.QtWidgets.QDialogButtonBox'>
Get enums for <class 'PyQt6.QtWidgets.QDockWidget'>
Get enums for <class 'PyQt6.QtWidgets.QDoubleSpinBox'>
Get enums for <class 'PyQt6.QtWidgets.QErrorMessage'>
Get enums for <class 'PyQt6.QtWidgets.QFileDialog'>
Get enums for <class 'PyQt6.QtWidgets.QFileIconProvider'>
Get enums for <class 'PyQt6.QtWidgets.QFocusFrame'>
Get enums for <class 'PyQt6.QtWidgets.QFontComboBox'>
Get enums for <class 'PyQt6.QtWidgets.QFontDialog'>
Get enums for <class 'PyQt6.QtWidgets.QFormLayout'>
<class 'PyQt6.QtWidgets.QFormLayout.TakeRowResult'>
Get enums for <class 'PyQt6.QtWidgets.QGesture'>
Get enums for <class 'PyQt6.QtWidgets.QGestureEvent'>
Get enums for <class 'PyQt6.QtWidgets.QGestureRecognizer'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsAnchor'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsLayoutItem'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsLayout'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsAnchorLayout'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsEffect'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsBlurEffect'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsColorizeEffect'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsDropShadowEffect'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsEllipseItem'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsGridLayout'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsItemGroup'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsLineItem'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsLinearLayout'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsObject'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsOpacityEffect'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsPathItem'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsPixmapItem'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsPolygonItem'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsWidget'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsProxyWidget'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsRectItem'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsTransform'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsRotation'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsScale'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsScene'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsSceneEvent'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsSceneContextMenuEvent'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsSceneDragDropEvent'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsSceneHelpEvent'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsSceneHoverEvent'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsSceneMouseEvent'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsSceneMoveEvent'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsSceneResizeEvent'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsSceneWheelEvent'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsSimpleTextItem'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsTextItem'>
Get enums for <class 'PyQt6.QtWidgets.QGraphicsView'>
Get enums for <class 'PyQt6.QtWidgets.QGridLayout'>
Get enums for <class 'PyQt6.QtWidgets.QGroupBox'>
Get enums for <class 'PyQt6.QtWidgets.QHBoxLayout'>
Get enums for <class 'PyQt6.QtWidgets.QHeaderView'>
Get enums for <class 'PyQt6.QtWidgets.QInputDialog'>
Get enums for <class 'PyQt6.QtWidgets.QItemDelegate'>
Get enums for <class 'PyQt6.QtWidgets.QItemEditorCreatorBase'>
Get enums for <class 'PyQt6.QtWidgets.QItemEditorFactory'>
Get enums for <class 'PyQt6.QtWidgets.QKeySequenceEdit'>
Get enums for <class 'PyQt6.QtWidgets.QLCDNumber'>
Get enums for <class 'PyQt6.QtWidgets.QLabel'>
Get enums for <class 'PyQt6.QtWidgets.QLineEdit'>
Get enums for <class 'PyQt6.QtWidgets.QListView'>
Get enums for <class 'PyQt6.QtWidgets.QListWidget'>
Get enums for <class 'PyQt6.QtWidgets.QListWidgetItem'>
Get enums for <class 'PyQt6.QtWidgets.QMainWindow'>
Get enums for <class 'PyQt6.QtWidgets.QMdiArea'>
Get enums for <class 'PyQt6.QtWidgets.QMdiSubWindow'>
Get enums for <class 'PyQt6.QtWidgets.QMenu'>
Get enums for <class 'PyQt6.QtWidgets.QMenuBar'>
Get enums for <class 'PyQt6.QtWidgets.QMessageBox'>
Get enums for <class 'PyQt6.QtWidgets.QPanGesture'>
Get enums for <class 'PyQt6.QtWidgets.QPinchGesture'>
Get enums for <class 'PyQt6.QtWidgets.QPlainTextDocumentLayout'>
Get enums for <class 'PyQt6.QtWidgets.QPlainTextEdit'>
Get enums for <class 'PyQt6.QtWidgets.QProgressBar'>
Get enums for <class 'PyQt6.QtWidgets.QProgressDialog'>
Get enums for <class 'PyQt6.QtWidgets.QProxyStyle'>
Get enums for <class 'PyQt6.QtWidgets.QRadioButton'>
Get enums for <class 'PyQt6.QtWidgets.QRubberBand'>
Get enums for <class 'PyQt6.QtWidgets.QScrollArea'>
Get enums for <class 'PyQt6.QtWidgets.QScrollBar'>
Get enums for <class 'PyQt6.QtWidgets.QScroller'>
Get enums for <class 'PyQt6.QtWidgets.QScrollerProperties'>
Get enums for <class 'PyQt6.QtWidgets.QSizeGrip'>
Get enums for <class 'PyQt6.QtWidgets.QSizePolicy'>
Get enums for <class 'PyQt6.QtWidgets.QSlider'>
Get enums for <class 'PyQt6.QtWidgets.QSpacerItem'>
Get enums for <class 'PyQt6.QtWidgets.QSpinBox'>
Get enums for <class 'PyQt6.QtWidgets.QSplashScreen'>
Get enums for <class 'PyQt6.QtWidgets.QSplitter'>
Get enums for <class 'PyQt6.QtWidgets.QSplitterHandle'>
Get enums for <class 'PyQt6.QtWidgets.QStackedLayout'>
Get enums for <class 'PyQt6.QtWidgets.QStackedWidget'>
Get enums for <class 'PyQt6.QtWidgets.QStatusBar'>
Get enums for <class 'PyQt6.QtWidgets.QStyleFactory'>
Get enums for <class 'PyQt6.QtWidgets.QStyleHintReturn'>
Get enums for <class 'PyQt6.QtWidgets.QStyleHintReturnMask'>
Get enums for <class 'PyQt6.QtWidgets.QStyleHintReturnVariant'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOption'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionButton'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionComplex'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionComboBox'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionDockWidget'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionFocusRect'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionFrame'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionGraphicsItem'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionGroupBox'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionHeader'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionHeaderV2'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionMenuItem'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionProgressBar'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionRubberBand'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionSizeGrip'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionSlider'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionSpinBox'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionTab'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionTabBarBase'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionTabWidgetFrame'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionTitleBar'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionToolBar'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionToolBox'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionToolButton'>
Get enums for <class 'PyQt6.QtWidgets.QStyleOptionViewItem'>
Get enums for <class 'PyQt6.QtWidgets.QStylePainter'>
Get enums for <class 'PyQt6.QtWidgets.QStyledItemDelegate'>
Get enums for <class 'PyQt6.QtWidgets.QSwipeGesture'>
Get enums for <class 'PyQt6.QtWidgets.QSystemTrayIcon'>
Get enums for <class 'PyQt6.QtWidgets.QTabBar'>
Get enums for <class 'PyQt6.QtWidgets.QTabWidget'>
Get enums for <class 'PyQt6.QtWidgets.QTableView'>
Get enums for <class 'PyQt6.QtWidgets.QTableWidget'>
Get enums for <class 'PyQt6.QtWidgets.QTableWidgetItem'>
Get enums for <class 'PyQt6.QtWidgets.QTableWidgetSelectionRange'>
Get enums for <class 'PyQt6.QtWidgets.QTapAndHoldGesture'>
Get enums for <class 'PyQt6.QtWidgets.QTapGesture'>
Get enums for <class 'PyQt6.QtWidgets.QTextEdit'>
<class 'PyQt6.QtWidgets.QTextEdit.ExtraSelection'>
Get enums for <class 'PyQt6.QtWidgets.QTextBrowser'>
Get enums for <class 'PyQt6.QtWidgets.QTimeEdit'>
Get enums for <class 'PyQt6.QtWidgets.QToolBar'>
Get enums for <class 'PyQt6.QtWidgets.QToolBox'>
Get enums for <class 'PyQt6.QtWidgets.QToolButton'>
Get enums for <class 'PyQt6.QtWidgets.QToolTip'>
Get enums for <class 'PyQt6.QtWidgets.QTreeView'>
Get enums for <class 'PyQt6.QtWidgets.QTreeWidget'>
Get enums for <class 'PyQt6.QtWidgets.QTreeWidgetItem'>
Get enums for <class 'PyQt6.QtWidgets.QTreeWidgetItemIterator'>
Get enums for <class 'PyQt6.QtWidgets.QUndoView'>
Get enums for <class 'PyQt6.QtWidgets.QVBoxLayout'>
Get enums for <class 'PyQt6.QtWidgets.QWhatsThis'>
Get enums for <class 'PyQt6.QtWidgets.QWidgetAction'>
Get enums for <class 'PyQt6.QtWidgets.QWidgetItem'>
Get enums for <class 'PyQt6.QtWidgets.QWizard'>
Get enums for <class 'PyQt6.QtWidgets.QWizardPage'>
Get enums for 16777215
Get enums for D:\_QGIS\PLUGINS\isl_box\.venv\Lib\site-packages\PyQt6\QtWidgets.pyd
Get enums for PyQt6.QtTest
Get enums for None
Get enums for PyQt6
Get enums for <_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD57590>
Get enums for ModuleSpec(name='PyQt6.QtTest', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD57590>, origin='D:\\_QGIS\\PLUGINS\\isl_box\\.venv\\Lib\\site-packages\\PyQt6\\QtTest.pyd')
Get enums for <class 'PyQt6.QtTest.QAbstractItemModelTester'>
Get enums for <class 'PyQt6.QtTest.QSignalSpy'>
Get enums for <class 'PyQt6.QtTest.QTest'>
Get enums for D:\_QGIS\PLUGINS\isl_box\.venv\Lib\site-packages\PyQt6\QtTest.pyd
Get enums for PyQt6.QtSql
Get enums for None
Get enums for PyQt6
Get enums for <_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD57050>
Get enums for ModuleSpec(name='PyQt6.QtSql', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD57050>, origin='D:\\_QGIS\\PLUGINS\\isl_box\\.venv\\Lib\\site-packages\\PyQt6\\QtSql.pyd')
Get enums for <class 'PyQt6.QtSql.QSql'>
Get enums for <class 'PyQt6.QtSql.QSqlDatabase'>
Get enums for <class 'PyQt6.QtSql.QSqlDriver'>
Get enums for <class 'PyQt6.QtSql.QSqlDriverCreatorBase'>
Get enums for <class 'PyQt6.QtSql.QSqlError'>
Get enums for <class 'PyQt6.QtSql.QSqlField'>
Get enums for <class 'PyQt6.QtSql.QSqlRecord'>
Get enums for <class 'PyQt6.QtSql.QSqlIndex'>
Get enums for <class 'PyQt6.QtSql.QSqlQuery'>
Get enums for <class 'PyQt6.QtSql.QSqlQueryModel'>
Get enums for <class 'PyQt6.QtSql.QSqlRelation'>
Get enums for <class 'PyQt6.QtSql.QSqlRelationalDelegate'>
Get enums for <class 'PyQt6.QtSql.QSqlTableModel'>
Get enums for <class 'PyQt6.QtSql.QSqlRelationalTableModel'>
Get enums for <class 'PyQt6.QtSql.QSqlResult'>
Get enums for D:\_QGIS\PLUGINS\isl_box\.venv\Lib\site-packages\PyQt6\QtSql.pyd
Get enums for PyQt6.QtSvg
Get enums for None
Get enums for PyQt6
Get enums for <_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD573E0>
Get enums for ModuleSpec(name='PyQt6.QtSvg', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD573E0>, origin='D:\\_QGIS\\PLUGINS\\isl_box\\.venv\\Lib\\site-packages\\PyQt6\\QtSvg.pyd')
Get enums for <class 'PyQt6.QtSvg.QSvgGenerator'>
Get enums for <class 'PyQt6.QtSvg.QSvgRenderer'>
Get enums for <class 'PyQt6.QtSvg.QtSvg'>
Get enums for D:\_QGIS\PLUGINS\isl_box\.venv\Lib\site-packages\PyQt6\QtSvg.pyd
Get enums for PyQt6.QtXml
Get enums for None
Get enums for PyQt6
Get enums for <_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD576B0>
Get enums for ModuleSpec(name='PyQt6.QtXml', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD576B0>, origin='D:\\_QGIS\\PLUGINS\\isl_box\\.venv\\Lib\\site-packages\\PyQt6\\QtXml.pyd')
Get enums for <class 'PyQt6.QtXml.QDomNode'>
Get enums for <class 'PyQt6.QtXml.QDomAttr'>
Get enums for <class 'PyQt6.QtXml.QDomCharacterData'>
Get enums for <class 'PyQt6.QtXml.QDomText'>
Get enums for <class 'PyQt6.QtXml.QDomCDATASection'>
Get enums for <class 'PyQt6.QtXml.QDomComment'>
Get enums for <class 'PyQt6.QtXml.QDomDocument'>
Get enums for <class 'PyQt6.QtXml.QDomDocumentFragment'>
Get enums for <class 'PyQt6.QtXml.QDomDocumentType'>
Get enums for <class 'PyQt6.QtXml.QDomElement'>
Get enums for <class 'PyQt6.QtXml.QDomEntity'>
Get enums for <class 'PyQt6.QtXml.QDomEntityReference'>
Get enums for <class 'PyQt6.QtXml.QDomImplementation'>
Get enums for <class 'PyQt6.QtXml.QDomNamedNodeMap'>
Get enums for <class 'PyQt6.QtXml.QDomNodeList'>
Get enums for <class 'PyQt6.QtXml.QDomNotation'>
Get enums for <class 'PyQt6.QtXml.QDomProcessingInstruction'>
Get enums for D:\_QGIS\PLUGINS\isl_box\.venv\Lib\site-packages\PyQt6\QtXml.pyd
Get enums for PyQt6.QtNetwork
Get enums for None
Get enums for PyQt6
Get enums for <_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD561B0>
Get enums for ModuleSpec(name='PyQt6.QtNetwork', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD561B0>, origin='D:\\_QGIS\\PLUGINS\\isl_box\\.venv\\Lib\\site-packages\\PyQt6\\QtNetwork.pyd')
Get enums for <class 'PyQt6.QtNetwork.QAbstractNetworkCache'>
Get enums for <class 'PyQt6.QtNetwork.QAbstractSocket'>
Get enums for <class 'PyQt6.QtNetwork.QAuthenticator'>
Get enums for <class 'PyQt6.QtNetwork.QDnsDomainNameRecord'>
Get enums for <class 'PyQt6.QtNetwork.QDnsHostAddressRecord'>
Get enums for <class 'PyQt6.QtNetwork.QDnsLookup'>
Get enums for <class 'PyQt6.QtNetwork.QDnsMailExchangeRecord'>
Get enums for <class 'PyQt6.QtNetwork.QDnsServiceRecord'>
Get enums for <class 'PyQt6.QtNetwork.QDnsTextRecord'>
Get enums for <class 'PyQt6.QtNetwork.QHostAddress'>
Get enums for <class 'PyQt6.QtNetwork.QHostInfo'>
Get enums for <class 'PyQt6.QtNetwork.QHstsPolicy'>
Get enums for <class 'PyQt6.QtNetwork.QHttp1Configuration'>
Get enums for <class 'PyQt6.QtNetwork.QHttp2Configuration'>
Get enums for <class 'PyQt6.QtNetwork.QHttpHeaders'>
Get enums for <class 'PyQt6.QtNetwork.QHttpMultiPart'>
Get enums for <class 'PyQt6.QtNetwork.QHttpPart'>
Get enums for <class 'PyQt6.QtNetwork.QLocalServer'>
Get enums for <class 'PyQt6.QtNetwork.QLocalSocket'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkAccessManager'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkAddressEntry'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkCacheMetaData'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkCookie'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkCookieJar'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkDatagram'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkDiskCache'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkInformation'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkInterface'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkProxy'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkProxyFactory'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkProxyQuery'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkReply'>
Get enums for <class 'PyQt6.QtNetwork.QNetworkRequest'>
Get enums for <enum 'QOcspCertificateStatus'>
<class 'object'>
Get enums for <class 'PyQt6.QtNetwork.QOcspResponse'>
Get enums for <enum 'QOcspRevocationReason'>
<class 'object'>
Get enums for <class 'PyQt6.QtNetwork.QPasswordDigestor'>
Get enums for <class 'PyQt6.QtNetwork.QSsl'>
Get enums for <class 'PyQt6.QtNetwork.QSslCertificate'>
Get enums for <class 'PyQt6.QtNetwork.QSslCertificateExtension'>
Get enums for <class 'PyQt6.QtNetwork.QSslCipher'>
Get enums for <class 'PyQt6.QtNetwork.QSslConfiguration'>
Get enums for <class 'PyQt6.QtNetwork.QSslDiffieHellmanParameters'>
Get enums for <class 'PyQt6.QtNetwork.QSslEllipticCurve'>
Get enums for <class 'PyQt6.QtNetwork.QSslError'>
Get enums for <class 'PyQt6.QtNetwork.QSslKey'>
Get enums for <class 'PyQt6.QtNetwork.QSslPreSharedKeyAuthenticator'>
Get enums for <class 'PyQt6.QtNetwork.QTcpServer'>
Get enums for <class 'PyQt6.QtNetwork.QSslServer'>
Get enums for <class 'PyQt6.QtNetwork.QTcpSocket'>
Get enums for <class 'PyQt6.QtNetwork.QSslSocket'>
Get enums for <class 'PyQt6.QtNetwork.QUdpSocket'>
Get enums for D:\_QGIS\PLUGINS\isl_box\.venv\Lib\site-packages\PyQt6\QtNetwork.pyd
Get enums for PyQt6.QtPrintSupport
Get enums for None
Get enums for PyQt6
Get enums for <_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD55610>
Get enums for ModuleSpec(name='PyQt6.QtPrintSupport', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FD55610>, origin='D:\\_QGIS\\PLUGINS\\isl_box\\.venv\\Lib\\site-packages\\PyQt6\\QtPrintSupport.pyd')
Get enums for <class 'PyQt6.QtPrintSupport.QAbstractPrintDialog'>
Get enums for <class 'PyQt6.QtPrintSupport.QPageSetupDialog'>
Get enums for <class 'PyQt6.QtPrintSupport.QPrintDialog'>
Get enums for <class 'PyQt6.QtPrintSupport.QPrintEngine'>
Get enums for <class 'PyQt6.QtPrintSupport.QPrintPreviewDialog'>
Get enums for <class 'PyQt6.QtPrintSupport.QPrintPreviewWidget'>
Get enums for <class 'PyQt6.QtPrintSupport.QPrinter'>
Get enums for <class 'PyQt6.QtPrintSupport.QPrinterInfo'>
Get enums for D:\_QGIS\PLUGINS\isl_box\.venv\Lib\site-packages\PyQt6\QtPrintSupport.pyd
Get enums for PyQt6.Qsci
Get enums for None
Get enums for PyQt6
Get enums for <_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FCE10D0>
Get enums for ModuleSpec(name='PyQt6.Qsci', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0x000001FA1FCE10D0>, origin='D:\\_QGIS\\PLUGINS\\isl_box\\.venv\\Lib\\site-packages\\PyQt6\\Qsci.pyd')
Get enums for <class 'PyQt6.Qsci.QsciAbstractAPIs'>
Get enums for <class 'PyQt6.Qsci.QsciAPIs'>
Get enums for <class 'PyQt6.Qsci.QsciCommand'>
Get enums for <class 'PyQt6.Qsci.QsciCommandSet'>
Get enums for <class 'PyQt6.Qsci.QsciDocument'>
Get enums for <class 'PyQt6.Qsci.QsciLexer'>
Get enums for <class 'PyQt6.Qsci.QsciLexerAVS'>
Get enums for <class 'PyQt6.Qsci.QsciLexerAsm'>
Get enums for <class 'PyQt6.Qsci.QsciLexerBash'>
Get enums for <class 'PyQt6.Qsci.QsciLexerBatch'>
Get enums for <class 'PyQt6.Qsci.QsciLexerCMake'>
Get enums for <class 'PyQt6.Qsci.QsciLexerCPP'>
Get enums for <class 'PyQt6.Qsci.QsciLexerCSS'>
Get enums for <class 'PyQt6.Qsci.QsciLexerCSharp'>
Get enums for <class 'PyQt6.Qsci.QsciLexerCoffeeScript'>
Get enums for <class 'PyQt6.Qsci.QsciLexerCustom'>
Get enums for <class 'PyQt6.Qsci.QsciLexerD'>
Get enums for <class 'PyQt6.Qsci.QsciLexerDiff'>
Get enums for <class 'PyQt6.Qsci.QsciLexerFortran77'>
Get enums for <class 'PyQt6.Qsci.QsciLexerFortran'>
Get enums for <class 'PyQt6.Qsci.QsciLexerHTML'>
Get enums for <class 'PyQt6.Qsci.QsciLexerHex'>
Get enums for <class 'PyQt6.Qsci.QsciLexerIDL'>
Get enums for <class 'PyQt6.Qsci.QsciLexerIntelHex'>
Get enums for <class 'PyQt6.Qsci.QsciLexerJSON'>
Get enums for <class 'PyQt6.Qsci.QsciLexerJava'>
Get enums for <class 'PyQt6.Qsci.QsciLexerJavaScript'>
Get enums for <class 'PyQt6.Qsci.QsciLexerLua'>
Get enums for <class 'PyQt6.Qsci.QsciLexerMASM'>
Get enums for <class 'PyQt6.Qsci.QsciLexerMakefile'>
Get enums for <class 'PyQt6.Qsci.QsciLexerMarkdown'>
Get enums for <class 'PyQt6.Qsci.QsciLexerMatlab'>
Get enums for <class 'PyQt6.Qsci.QsciLexerNASM'>
Get enums for <class 'PyQt6.Qsci.QsciLexerOctave'>
Get enums for <class 'PyQt6.Qsci.QsciLexerPO'>
Get enums for <class 'PyQt6.Qsci.QsciLexerPOV'>
Get enums for <class 'PyQt6.Qsci.QsciLexerPascal'>
Get enums for <class 'PyQt6.Qsci.QsciLexerPerl'>
Get enums for <class 'PyQt6.Qsci.QsciLexerPostScript'>
Get enums for <class 'PyQt6.Qsci.QsciLexerProperties'>
Get enums for <class 'PyQt6.Qsci.QsciLexerPython'>
Get enums for <class 'PyQt6.Qsci.QsciLexerRuby'>
Get enums for <class 'PyQt6.Qsci.QsciLexerSQL'>
Get enums for <class 'PyQt6.Qsci.QsciLexerSRec'>
Get enums for <class 'PyQt6.Qsci.QsciLexerSpice'>
Get enums for <class 'PyQt6.Qsci.QsciLexerTCL'>
Get enums for <class 'PyQt6.Qsci.QsciLexerTeX'>
Get enums for <class 'PyQt6.Qsci.QsciLexerTekHex'>
Get enums for <class 'PyQt6.Qsci.QsciLexerVHDL'>
Get enums for <class 'PyQt6.Qsci.QsciLexerVerilog'>
Get enums for <class 'PyQt6.Qsci.QsciLexerXML'>
Get enums for <class 'PyQt6.Qsci.QsciLexerYAML'>
Get enums for <class 'PyQt6.Qsci.QsciMacro'>
Get enums for <class 'PyQt6.Qsci.QsciPrinter'>
Get enums for <class 'PyQt6.Qsci.QsciScintillaBase'>
Get enums for <class 'PyQt6.Qsci.QsciScintilla'>
Get enums for <class 'PyQt6.Qsci.QsciStyle'>
Get enums for <class 'PyQt6.Qsci.QsciStyledText'>
Get enums for 134657
Get enums for 2.14.1
Get enums for D:\_QGIS\PLUGINS\isl_box\.venv\Lib\site-packages\PyQt6\Qsci.pyd
Get enums for qgis.core
Get enums for 
***************************************************************************
  __init__.py
  ---------------------
  Date                 : May 2014
  Copyright            : (C) 2014 by Nathan Woodrow
  Email                : woodrow dot nathan at gmail dot com
***************************************************************************
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
***************************************************************************

Get enums for qgis.core
Get enums for <_frozen_importlib_external.SourceFileLoader object at 0x000001FA24771D30>
Get enums for ModuleSpec(name='qgis.core', loader=<_frozen_importlib_external.SourceFileLoader object at 0x000001FA24771D30>, origin='C:\\OSGeo4W\\apps\\qgis\\python\\qgis\\core\\__init__.py', submodule_search_locations=['C:\\OSGeo4W\\apps\\qgis\\python\\qgis\\core'])
Get enums for ['C:\\OSGeo4W\\apps\\qgis\\python\\qgis\\core']
Get enums for C:\OSGeo4W\apps\qgis\python\qgis\core\__init__.py
Get enums for C:\OSGeo4W\apps\qgis\python\qgis\core\__pycache__\__init__.cpython-312.pyc
Get enums for {'__name__': 'builtins', '__doc__': "Built-in functions, types, exceptions, and other objects.\n\nThis module provides direct access to all 'built-in'\nidentifiers of Python; for example, builtins.len is\nthe full name for the built-in function len().\n\nThis module is not normally accessed explicitly by most\napplications, but can be useful in modules that provide\nobjects with the same name as a built-in value, but in\nwhich the built-in of that name is also needed.", '__package__': '', '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>, origin='built-in'), '__build_class__': <built-in function __build_class__>, '__import__': <built-in function __import__>, 'abs': <built-in function abs>, 'all': <built-in function all>, 'any': <built-in function any>, 'ascii': <built-in function ascii>, 'bin': <built-in function bin>, 'breakpoint': <built-in function breakpoint>, 'callable': <built-in function callable>, 'chr': <built-in function chr>, 'compile': <built-in function compile>, 'delattr': <built-in function delattr>, 'dir': <built-in function dir>, 'divmod': <built-in function divmod>, 'eval': <built-in function eval>, 'exec': <built-in function exec>, 'format': <built-in function format>, 'getattr': <built-in function getattr>, 'globals': <built-in function globals>, 'hasattr': <built-in function hasattr>, 'hash': <built-in function hash>, 'hex': <built-in function hex>, 'id': <built-in function id>, 'input': <built-in function input>, 'isinstance': <built-in function isinstance>, 'issubclass': <built-in function issubclass>, 'iter': <built-in function iter>, 'aiter': <built-in function aiter>, 'len': <built-in function len>, 'locals': <built-in function locals>, 'max': <built-in function max>, 'min': <built-in function min>, 'next': <built-in function next>, 'anext': <built-in function anext>, 'oct': <built-in function oct>, 'ord': <built-in function ord>, 'pow': <built-in function pow>, 'print': <built-in function print>, 'repr': <built-in function repr>, 'round': <built-in function round>, 'setattr': <built-in function setattr>, 'sorted': <built-in function sorted>, 'sum': <built-in function sum>, 'vars': <built-in function vars>, 'None': None, 'Ellipsis': Ellipsis, 'NotImplemented': NotImplemented, 'False': False, 'True': True, 'bool': <class 'bool'>, 'memoryview': <class 'memoryview'>, 'bytearray': <class 'bytearray'>, 'bytes': <class 'bytes'>, 'classmethod': <class 'classmethod'>, 'complex': <class 'complex'>, 'dict': <class 'dict'>, 'enumerate': <class 'enumerate'>, 'filter': <class 'filter'>, 'float': <class 'float'>, 'frozenset': <class 'frozenset'>, 'property': <class 'property'>, 'int': <class 'int'>, 'list': <class 'list'>, 'map': <class 'map'>, 'object': <class 'object'>, 'range': <class 'range'>, 'reversed': <class 'reversed'>, 'set': <class 'set'>, 'slice': <class 'slice'>, 'staticmethod': <class 'staticmethod'>, 'str': <class 'str'>, 'super': <class 'super'>, 'tuple': <class 'tuple'>, 'type': <class 'type'>, 'zip': <class 'zip'>, '__debug__': True, 'BaseException': <class 'BaseException'>, 'BaseExceptionGroup': <class 'BaseExceptionGroup'>, 'Exception': <class 'Exception'>, 'GeneratorExit': <class 'GeneratorExit'>, 'KeyboardInterrupt': <class 'KeyboardInterrupt'>, 'SystemExit': <class 'SystemExit'>, 'ArithmeticError': <class 'ArithmeticError'>, 'AssertionError': <class 'AssertionError'>, 'AttributeError': <class 'AttributeError'>, 'BufferError': <class 'BufferError'>, 'EOFError': <class 'EOFError'>, 'ImportError': <class 'ImportError'>, 'LookupError': <class 'LookupError'>, 'MemoryError': <class 'MemoryError'>, 'NameError': <class 'NameError'>, 'OSError': <class 'OSError'>, 'ReferenceError': <class 'ReferenceError'>, 'RuntimeError': <class 'RuntimeError'>, 'StopAsyncIteration': <class 'StopAsyncIteration'>, 'StopIteration': <class 'StopIteration'>, 'SyntaxError': <class 'SyntaxError'>, 'SystemError': <class 'SystemError'>, 'TypeError': <class 'TypeError'>, 'ValueError': <class 'ValueError'>, 'Warning': <class 'Warning'>, 'FloatingPointError': <class 'FloatingPointError'>, 'OverflowError': <class 'OverflowError'>, 'ZeroDivisionError': <class 'ZeroDivisionError'>, 'BytesWarning': <class 'BytesWarning'>, 'DeprecationWarning': <class 'DeprecationWarning'>, 'EncodingWarning': <class 'EncodingWarning'>, 'FutureWarning': <class 'FutureWarning'>, 'ImportWarning': <class 'ImportWarning'>, 'PendingDeprecationWarning': <class 'PendingDeprecationWarning'>, 'ResourceWarning': <class 'ResourceWarning'>, 'RuntimeWarning': <class 'RuntimeWarning'>, 'SyntaxWarning': <class 'SyntaxWarning'>, 'UnicodeWarning': <class 'UnicodeWarning'>, 'UserWarning': <class 'UserWarning'>, 'BlockingIOError': <class 'BlockingIOError'>, 'ChildProcessError': <class 'ChildProcessError'>, 'ConnectionError': <class 'ConnectionError'>, 'FileExistsError': <class 'FileExistsError'>, 'FileNotFoundError': <class 'FileNotFoundError'>, 'InterruptedError': <class 'InterruptedError'>, 'IsADirectoryError': <class 'IsADirectoryError'>, 'NotADirectoryError': <class 'NotADirectoryError'>, 'PermissionError': <class 'PermissionError'>, 'ProcessLookupError': <class 'ProcessLookupError'>, 'TimeoutError': <class 'TimeoutError'>, 'IndentationError': <class 'IndentationError'>, 'IndexError': <class 'IndexError'>, 'KeyError': <class 'KeyError'>, 'ModuleNotFoundError': <class 'ModuleNotFoundError'>, 'NotImplementedError': <class 'NotImplementedError'>, 'RecursionError': <class 'RecursionError'>, 'UnboundLocalError': <class 'UnboundLocalError'>, 'UnicodeError': <class 'UnicodeError'>, 'BrokenPipeError': <class 'BrokenPipeError'>, 'ConnectionAbortedError': <class 'ConnectionAbortedError'>, 'ConnectionRefusedError': <class 'ConnectionRefusedError'>, 'ConnectionResetError': <class 'ConnectionResetError'>, 'TabError': <class 'TabError'>, 'UnicodeDecodeError': <class 'UnicodeDecodeError'>, 'UnicodeEncodeError': <class 'UnicodeEncodeError'>, 'UnicodeTranslateError': <class 'UnicodeTranslateError'>, 'ExceptionGroup': <class 'ExceptionGroup'>, 'EnvironmentError': <class 'OSError'>, 'IOError': <class 'OSError'>, 'WindowsError': <class 'OSError'>, 'open': <built-in function open>, 'quit': Use quit() or Ctrl-Z plus Return to exit, 'exit': Use exit() or Ctrl-Z plus Return to exit, 'copyright': Copyright (c) 2001-2023 Python Software Foundation.
All Rights Reserved.

Copyright (c) 2000 BeOpen.com.
All Rights Reserved.

Copyright (c) 1995-2001 Corporation for National Research Initiatives.
All Rights Reserved.

Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
All Rights Reserved., 'credits':     Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands
  for supporting Python development.  See www.python.org for more information., 'license': See https://www.python.org/psf/license/, 'help': Type help() for interactive help, or help(object) for help about object.}
Get enums for Nathan Woodrow
Get enums for May 2014
Get enums for (C) 2014, Nathan Woodrow
Get enums for NULL
Get enums for <built-in function stringToSymbolLayerReferenceList>
Get enums for <built-in function symbolLayerReferenceListToString>
Get enums for <built-in function compareWkt>
Get enums for <built-in function geoNone>
Get enums for <built-in function geoEpsgCrsAuthId>
Get enums for <built-in function geoProj4>
Get enums for <built-in function geoWkt>
Get enums for <built-in function qgsVsiPrefix>
Get enums for <built-in function qgsVariantGreaterThan>
Get enums for <built-in function qgsVariantEqual>
Get enums for <built-in function qgsVariantLessThan>
Get enums for <built-in function qgsPermissiveToLongLong>
Get enums for <built-in function qgsPermissiveToInt>
Get enums for <built-in function qgsPermissiveToDouble>
Get enums for <built-in function qgsRound>
Get enums for <built-in function qgsDoubleNearSig>
Get enums for <built-in function qgsFloatNear>
Get enums for <built-in function qgsDoubleNear>
Get enums for <built-in function qgsNanCompatibleEquals>
Get enums for <built-in function qgsDoubleToString>
Get enums for <built-in function qHash>
Get enums for <class 'qgis._core.ColorrampTable'>
Get enums for <class 'qgis._core.LabelSettingsTable'>
Get enums for <class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>
<class 'qgis._core.Qgis.AnnotationItemFlags'>
<class 'qgis._core.Qgis'>

@troopa81 troopa81 self-assigned this Sep 16, 2024
@troopa81
Copy link
Contributor

I fail to reproduce the issue on master (but script hasn't change since 3.38.1).

@nicogodet @kannes Did you modifiy the python script because it looks like code and traceback line number have changed.

How did you installed QGIS ? with packages? Which distribution ?

@troopa81 troopa81 added the Feedback Waiting on the submitter for answers label Sep 16, 2024
@nicogodet
Copy link
Member

@troopa81 my VSCode has a format on save by default thats why and I also add some print and depth counter to avoid python error (look for comment with your GH name)

my pyqt5_to_pyqt6.py script
#!/usr/bin/env python3

"""
***************************************************************************
  3to4.py
  ---------------------
  Date                 : 2023 December
  Copyright            : (C) 2023 by Julien Cabieces
  Email                : julien dot cabieces at oslandia dot com
***************************************************************************
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
***************************************************************************
"""

"""
Migrate a folder containing python files from QGIS3/Qt5 to QGIS4/Qt6

Highly inspired from this video https://www.youtube.com/watch?v=G1omxo5pphw

needed tools:
pip install astpretty tokenize-rt

Few useful commands:

- display python file ast
astpretty --no-show-offsets myfile.py

- display file tokens
tokenize-rt myfile.py
"""

__author__ = "Julien Cabieces"
__date__ = "2023 December"
__copyright__ = "(C) 2023, Julien Cabieces"


import argparse
import ast
import glob
import inspect
import os
import sys
from collections import defaultdict
from enum import Enum
from typing import Sequence

from PyQt6 import (
  Qsci,
  QtCore,
  QtGui,
  QtNetwork,
  QtPrintSupport,
  QtSql,
  QtSvg,
  QtTest,
  QtWidgets,
  QtXml,
)
from PyQt6.Qsci import *  # noqa: F403
from PyQt6.QtCore import *  # noqa: F403
from PyQt6.QtGui import *  # noqa: F403
from PyQt6.QtNetwork import *  # noqa: F403
from PyQt6.QtPrintSupport import *  # noqa: F403
from PyQt6.QtSql import *  # noqa: F403
from PyQt6.QtTest import *  # noqa: F403
from PyQt6.QtWidgets import *  # noqa: F403
from PyQt6.QtXml import *  # noqa: F403
from tokenize_rt import Offset, reversed_enumerate, src_to_tokens, tokens_to_src

try:
  import qgis._3d as qgis_3d  # noqa: F403
  import qgis.analysis as qgis_analysis  # noqa: F403
  import qgis.core as qgis_core  # noqa: F403
  import qgis.gui as qgis_gui  # noqa: F403
  from qgis._3d import *  # noqa: F403
  from qgis.analysis import *  # noqa: F403
  from qgis.core import *  # noqa: F403
  from qgis.gui import *  # noqa: F403
except ImportError:
  qgis_core = None
  qgis_gui = None
  qgis_analysis = None
  qgis_3d = None
  print("QGIS classes not available for introspection, only a partial upgrade will be performed")

sys.setrecursionlimit(1500)
target_modules = [
  QtCore,
  QtGui,
  QtWidgets,
  QtTest,
  QtSql,
  QtSvg,
  QtXml,
  QtNetwork,
  QtPrintSupport,
  Qsci,
]
if qgis_core is not None:
  target_modules.extend([qgis_core, qgis_gui, qgis_analysis, qgis_3d])

# qmetatype which have been renamed
qmetatype_mapping = {
  "Invalid": "UnknownType",
  "BitArray": "QBitArray",
  "Bitmap": "QBitmap",
  "Brush": "QBrush",
  "ByteArray": "QByteArray",
  "Char": "QChar",
  "Color": "QColor",
  "Cursor": "QCursor",
  "Date": "QDate",
  "DateTime": "QDateTime",
  "EasingCurve": "QEasingCurve",
  "Uuid": "QUuid",
  "ModelIndex": "QModelIndex",
  "PersistentModelIndex": "QPersistentModelIndex",
  "Font": "QFont",
  "Hash": "QVariantHash",
  "Icon": "QIcon",
  "Image": "QImage",
  "KeySequence": "QKeySequence",
  "Line": "QLine",
  "LineF": "QLineF",
  "List": "QVariantList",
  "Locale": "QLocale",
  "Map": "QVariantMap",
  "Transform": "QTransform",
  "Matrix4x4": "QMatrix4x4",
  "Palette": "QPalette",
  "Pen": "QPen",
  "Pixmap": "QPixmap",
  "Point": "QPoint",
  "PointF": "QPointF",
  "Polygon": "QPolygon",
  "PolygonF": "QPolygonF",
  "Quaternion": "QQuaternion",
  "Rect": "QRect",
  "RectF": "QRectF",
  "RegularExpression": "QRegularExpression",
  "Region": "QRegion",
  "Size": "QSize",
  "SizeF": "QSizeF",
  "SizePolicy": "QSizePolicy",
  "String": "QString",
  "StringList": "QStringList",
  "TextFormat": "QTextFormat",
  "TextLength": "QTextLength",
  "Time": "QTime",
  "Url": "QUrl",
  "Vector2D": "QVector2D",
  "Vector3D": "QVector3D",
  "Vector4D": "QVector4D",
  "UserType": "User",
}

deprecated_renamed_enums = {
  ("Qt", "MidButton"): ("MouseButton", "MiddleButton"),
  ("Qt", "TextColorRole"): ("ItemDataRole", "ForegroundRole"),
  ("Qt", "BackgroundColorRole"): ("ItemDataRole", "BackgroundRole"),
  ("QPainter", "HighQualityAntialiasing"): ("RenderHint", "Antialiasing"),
}

rename_function_attributes = {"exec_": "exec"}

rename_function_definitions = {"exec_": "exec"}

import_warnings = {
  "QRegExp": "QRegExp is removed in Qt6, please use QRegularExpression for Qt5/Qt6 compatibility"
}

# { (class, enum_value) : enum_name }
qt_enums = {}
ambiguous_enums = defaultdict(set)


def fix_file(filename: str, qgis3_compat: bool) -> int:
  with open(filename, encoding="UTF-8") as f:
      contents = f.read()

  fix_qvariant_type = []  # QVariant.Int, QVariant.Double ...
  fix_pyqt_import = []  # from PyQt5.QtXXX
  fix_qt_enums = {}  # Unscoping of enums
  member_renames = {}
  token_renames = {}
  function_def_renames = {}
  rename_qt_enums = []  # Renaming deprecated removed enums
  custom_updates = {}
  imported_modules = set()
  extra_imports = defaultdict(set)
  removed_imports = defaultdict(set)
  import_offsets = {}

  object_types = {}

  def visit_assign(_node: ast.Assign, _parent):
      if (
          isinstance(_node.value, ast.Call)
          and isinstance(_node.value.func, ast.Name)
          and _node.value.func.id in ("QFontMetrics", "QFontMetricsF")
      ):
          object_types[_node.targets[0].id] = _node.value.func.id

  def visit_call(_node: ast.Call, _parent):
      if isinstance(_node.func, ast.Attribute):
          if _node.func.attr in rename_function_attributes:
              attr_node = _node.func
              member_renames[
                  Offset(_node.func.lineno, attr_node.end_col_offset - len(_node.func.attr) - 1)
              ] = rename_function_attributes[_node.func.attr]
          if _node.func.attr == "addAction":
              if len(_node.args) >= 4:
                  sys.stderr.write(
                      f"{filename}:{_node.lineno}:{_node.col_offset} WARNING: fragile call to addAction. Use my_action = QAction(...), obj.addAction(my_action) instead.\n"
                  )
          if _node.func.attr == "desktop":
              if len(_node.args) == 0:
                  sys.stderr.write(
                      f"{filename}:{_node.lineno}:{_node.col_offset} WARNING: QDesktopWidget is deprecated and removed in Qt6. Replace with alternative approach instead.\n"
                  )

      if isinstance(_node.func, ast.Name) and _node.func.id == "QVariant":
          if not _node.args:
              extra_imports["qgis.core"].update({"NULL"})

              def _invalid_qvariant_to_null(start_index: int, tokens):
                  assert tokens[start_index].src == "QVariant"
                  assert tokens[start_index + 1].src == "("
                  assert tokens[start_index + 2].src == ")"

                  tokens[start_index] = tokens[start_index]._replace(src="NULL")
                  for i in range(start_index + 1, start_index + 3):
                      tokens[i] = tokens[i]._replace(src="")

              custom_updates[Offset(_node.lineno, _node.col_offset)] = _invalid_qvariant_to_null
          elif (
              len(_node.args) == 1
              and isinstance(_node.args[0], ast.Attribute)
              and isinstance(_node.args[0].value, ast.Name)
              and _node.args[0].value.id == "QVariant"
          ):
              extra_imports["qgis.core"].update({"NULL"})

              def _fix_null_qvariant(start_index: int, tokens):
                  assert tokens[start_index].src == "QVariant"
                  assert tokens[start_index + 1].src == "("
                  assert tokens[start_index + 2].src == "QVariant"
                  assert tokens[start_index + 3].src == "."
                  assert tokens[start_index + 5].src == ")"

                  tokens[start_index] = tokens[start_index]._replace(src="NULL")
                  for i in range(start_index + 1, start_index + 6):
                      tokens[i] = tokens[i]._replace(src="")

              custom_updates[Offset(_node.lineno, _node.col_offset)] = _fix_null_qvariant
      elif isinstance(_node.func, ast.Name) and _node.func.id == "QDateTime":
          if len(_node.args) == 8:
              # QDateTime(yyyy, mm, dd, hh, MM, ss, ms, ts) doesn't work anymore,
              # so port to more reliable QDateTime(QDate, QTime, ts) form

              extra_imports["qgis.PyQt.QtCore"].update({"QDate", "QTime"})

              def _fix_qdatetime_construct(start_index: int, tokens):
                  i = start_index + 1
                  assert tokens[i].src == "("
                  tokens[i] = tokens[i]._replace(src="(QDate(")
                  while tokens[i].offset < Offset(_node.args[2].lineno, _node.args[2].col_offset):
                      i += 1
                  assert tokens[i + 1].src == ","
                  i += 1
                  tokens[i] = tokens[i]._replace(src="), QTime(")
                  i += 1
                  while not tokens[i].src.strip():
                      tokens[i] = tokens[i]._replace(src="")
                      i += 1
                  while tokens[i].offset < Offset(_node.args[6].lineno, _node.args[6].col_offset):
                      i += 1
                  i += 1
                  assert tokens[i].src == ","
                  tokens[i] = tokens[i]._replace(src="),")

              custom_updates[Offset(_node.lineno, _node.col_offset)] = _fix_qdatetime_construct
          elif (
              len(_node.args) == 1
              and isinstance(_node.args[0], ast.Call)
              and _node.args[0].func.id == "QDate"
          ):
              # QDateTime(QDate(..)) doesn't work anymore,
              # so port to more reliable QDateTime(QDate(...), QTime(0,0,0)) form
              extra_imports["qgis.PyQt.QtCore"].update({"QTime"})

              def _fix_qdatetime_construct(start_index: int, tokens):
                  assert tokens[start_index].src == "QDateTime"
                  assert tokens[start_index + 1].src == "("
                  assert tokens[start_index + 2].src == "QDate"
                  assert tokens[start_index + 3].src == "("
                  i = start_index + 4
                  while tokens[i].offset < Offset(
                      _node.args[0].end_lineno, _node.args[0].end_col_offset
                  ):
                      i += 1

                  assert tokens[i - 1].src == ")"
                  tokens[i - 1] = tokens[i - 1]._replace(src="), QTime(0, 0, 0)")

              custom_updates[Offset(_node.lineno, _node.col_offset)] = _fix_qdatetime_construct

  def visit_attribute(_node: ast.Attribute, _parent):
      if isinstance(_node.value, ast.Name):
          if _node.value.id == "qApp":
              token_renames[Offset(_node.value.lineno, _node.value.col_offset)] = (
                  "QApplication.instance()"
              )
              extra_imports["qgis.PyQt.QtWidgets"].update({"QApplication"})
              removed_imports["qgis.PyQt.QtWidgets"].update({"qApp"})
          if _node.value.id == "QVariant" and _node.attr == "Type":

              def _replace_qvariant_type(start_index: int, tokens):
                  # QVariant.Type.XXX doesn't exist, it should be QVariant.XXX
                  assert tokens[start_index].src == "QVariant"
                  assert tokens[start_index + 1].src == "."
                  assert tokens[start_index + 2].src == "Type"
                  assert tokens[start_index + 3].src == "."

                  tokens[start_index + 2] = tokens[start_index + 2]._replace(src="")
                  tokens[start_index + 3] = tokens[start_index + 3]._replace(src="")

              custom_updates[Offset(node.lineno, node.col_offset)] = _replace_qvariant_type
          if object_types.get(_node.value.id) in ("QFontMetrics", "QFontMetricsF"):
              if _node.attr == "width":
                  sys.stderr.write(
                      f"{filename}:{_node.lineno}:{_node.col_offset} WARNING: QFontMetrics.width() "
                      "has been removed in Qt6. Use QFontMetrics.horizontalAdvance() if plugin can "
                      "safely require Qt >= 5.11, or QFontMetrics.boundingRect().width() otherwise.\n"
                  )

      elif isinstance(_node.value, ast.Call):
          if _node.attr == "width" and (
              (
                  isinstance(_node.value.func, ast.Attribute)
                  and _node.value.func.attr == "fontMetrics"
              )
              or (
                  isinstance(_node.value.func, ast.Name) and _node.value.func.id == "QFontMetrics"
              )
          ):
              sys.stderr.write(
                  f"{filename}:{_node.lineno}:{_node.col_offset} WARNING: QFontMetrics.width() "
                  "has been removed in Qt6. Use QFontMetrics.horizontalAdvance() if plugin can "
                  "safely require Qt >= 5.11, or QFontMetrics.boundingRect().width() otherwise.\n"
              )

  def visit_subscript(_node: ast.Subscript, _parent):
      if isinstance(_node.value, ast.Attribute):
          if (
              _node.value.attr == "activated"
              and isinstance(_node.slice, ast.Name)
              and _node.slice.id == "str"
          ):
              sys.stderr.write(
                  f"{filename}:{_node.lineno}:{_node.col_offset} WARNING: activated[str] "
                  "has been removed in Qt6. Consider using QComboBox.activated instead if the string is not required, "
                  "or QComboBox.textActivated if the plugin can "
                  "safely require Qt >= 5.14. Otherwise conditional Qt version code will need to be introduced.\n"
              )

  def visit_import(_node: ast.ImportFrom, _parent):
      import_offsets[Offset(node.lineno, node.col_offset)] = (
          node.module,
          set(name.name for name in node.names),
          node.end_lineno,
          node.end_col_offset,
      )
      imported_modules.add(node.module)
      for name in node.names:
          if name.name in import_warnings:
              print(f"{filename}: {import_warnings[name.name]}")
          if name.name == "resources_rc":
              sys.stderr.write(
                  f"{filename}:{_node.lineno}:{_node.col_offset} WARNING: support for compiled resources "
                  "is removed in Qt6. Directly load icon resources by file path and load UI fields using "
                  "uic.loadUiType by file path instead.\n"
              )
      if _node.module == "qgis.PyQt.Qt":
          extra_imports["qgis.PyQt.QtCore"].update({"Qt"})
          removed_imports["qgis.PyQt.Qt"].update({"Qt"})

  tree = ast.parse(contents, filename=filename)
  for parent in ast.walk(tree):
      for node in ast.iter_child_nodes(parent):
          if isinstance(node, ast.ImportFrom):
              visit_import(node, parent)

          if (
              not qgis3_compat
              and isinstance(node, ast.Attribute)
              and isinstance(node.value, ast.Name)
              and node.value.id == "QVariant"
          ):
              fix_qvariant_type.append(Offset(node.lineno, node.col_offset))

          if isinstance(node, ast.Call):
              visit_call(node, parent)
          elif isinstance(node, ast.Attribute):
              visit_attribute(node, parent)
          elif isinstance(node, ast.Subscript):
              visit_subscript(node, parent)
          elif isinstance(node, ast.Assign):
              visit_assign(node, parent)

          if isinstance(node, ast.FunctionDef) and node.name in rename_function_definitions:
              function_def_renames[Offset(node.lineno, node.col_offset)] = (
                  rename_function_definitions[node.name]
              )

          if (
              isinstance(node, ast.Attribute)
              and isinstance(node.value, ast.Name)
              and (node.value.id, node.attr) in ambiguous_enums
          ):
              disambiguated = False
              try:
                  actual = eval(f"{node.value.id}.{node.attr}")
                  obj = globals()[node.value.id]
                  if isinstance(obj, type):
                      for attr_name in dir(obj):
                          attr = getattr(obj, attr_name)
                          if attr is actual.__class__:
                              # print(f'Found alias {node.value.id}.{attr_name}')
                              disambiguated = True
                              fix_qt_enums[Offset(node.lineno, node.col_offset)] = (
                                  node.value.id,
                                  attr_name,
                                  node.attr,
                              )
                              break

              except AttributeError:
                  pass

              if not disambiguated:
                  possible_values = [
                      f"{node.value.id}.{e}.{node.attr}"
                      for e in ambiguous_enums[(node.value.id, node.attr)]
                  ]
                  sys.stderr.write(
                      f'{filename}:{node.lineno}:{node.col_offset} WARNING: ambiguous enum, cannot fix: {node.value.id}.{node.attr}. Could be: {", ".join(possible_values)}\n'
                  )
          elif (
              isinstance(node, ast.Attribute)
              and isinstance(node.value, ast.Name)
              and not isinstance(parent, ast.Attribute)
              and (node.value.id, node.attr) in qt_enums
          ):
              fix_qt_enums[Offset(node.lineno, node.col_offset)] = (
                  node.value.id,
                  qt_enums[(node.value.id, node.attr)],
                  node.attr,
              )

          if (
              isinstance(node, ast.Attribute)
              and isinstance(node.value, ast.Name)
              and (node.value.id, node.attr) in deprecated_renamed_enums
          ):
              rename_qt_enums.append(Offset(node.lineno, node.col_offset))

          elif (
              isinstance(node, ast.ImportFrom)
              and node.module
              and node.module.startswith("PyQt5.")
          ):
              fix_pyqt_import.append(Offset(node.lineno, node.col_offset))

  for module, classes in extra_imports.items():
      if module not in imported_modules:
          class_import = ", ".join(classes)
          import_statement = f"from {module} import {class_import}"
          print(f"{filename}: Missing import, manually add \n\t{import_statement}")

  if not any(
      [
          fix_qvariant_type,
          fix_pyqt_import,
          fix_qt_enums,
          rename_qt_enums,
          member_renames,
          function_def_renames,
          custom_updates,
          extra_imports,
          removed_imports,
          token_renames,
      ]
  ):
      return 0

  tokens = src_to_tokens(contents)
  for i, token in reversed_enumerate(tokens):
      if token.offset in import_offsets:
          end_import_offset = Offset(*import_offsets[token.offset][-2:])
          del import_offsets[token.offset]
          assert tokens[i].src == "from"
          token_index = i + 1
          while not tokens[token_index].src.strip():
              token_index += 1

          module = ""
          while tokens[token_index].src.strip():
              module += tokens[token_index].src
              token_index += 1

          if extra_imports.get(module) or removed_imports.get(module):
              current_imports = set()
              while True:
                  token_index += 1
                  if tokens[token_index].offset == end_import_offset:
                      break
                  if tokens[token_index].src.strip() in ("", ",", "import", "(", ")"):
                      continue

                  import_ = tokens[token_index].src
                  if import_ in removed_imports.get(module, set()):
                      tokens[token_index] = tokens[token_index]._replace(src="")
                      prev_token_index = token_index - 1
                      while True:
                          if tokens[prev_token_index].src.strip() in ("", ","):
                              tokens[prev_token_index] = tokens[prev_token_index]._replace(src="")
                              prev_token_index -= 1
                          else:
                              break

                      none_forward = True
                      current_index = prev_token_index + 1
                      while True:
                          if tokens[current_index].src in ("\n", ")"):
                              break
                          elif tokens[current_index].src.strip():
                              none_forward = False
                              break
                          current_index += 1

                      none_backward = True
                      current_index = prev_token_index
                      while True:
                          if tokens[current_index].src in ("import",):
                              break
                          elif tokens[current_index].src.strip():
                              none_backward = False
                              break
                          current_index -= 1
                      if none_backward and none_forward:
                          # no more imports from this module, remove whole import
                          while True:
                              if tokens[current_index].src in ("from",):
                                  break
                              current_index -= 1

                          while True:
                              if tokens[current_index].src in ("\n",):
                                  tokens[current_index] = tokens[current_index]._replace(src="")
                                  break
                              tokens[current_index] = tokens[current_index]._replace(src="")
                              current_index += 1

                  else:
                      current_imports.add(import_)

              imports_to_add = extra_imports.get(module, set()) - current_imports
              if imports_to_add:
                  additional_import_string = ", ".join(imports_to_add)
                  if tokens[token_index - 1].src == ")":
                      token_index -= 1
                      while tokens[token_index].src.strip() in ("", ",", ")"):
                          tokens[token_index] = tokens[token_index]._replace(src="")
                          token_index -= 1
                      tokens[token_index + 1] = tokens[token_index + 1]._replace(
                          src=f", {additional_import_string})"
                      )
                  else:
                      tokens[token_index] = tokens[token_index]._replace(
                          src=f", {additional_import_string}{tokens[token_index].src}"
                      )

      if token.offset in fix_qvariant_type:
          assert tokens[i].src == "QVariant"
          assert tokens[i + 1].src == "."
          tokens[i] = tokens[i]._replace(src="QMetaType.Type")
          attr = tokens[i + 2].src
          if attr in qmetatype_mapping:
              tokens[i + 2] = tokens[i + 2]._replace(src=qmetatype_mapping[attr])

      if token.offset in custom_updates:
          custom_updates[token.offset](i, tokens)

      if token.offset in fix_pyqt_import:
          assert tokens[i + 2].src == "PyQt5"
          tokens[i + 2] = tokens[i + 2]._replace(src="qgis.PyQt")

      if token.offset in function_def_renames and tokens[i].src == "def":
          tokens[i + 2] = tokens[i + 2]._replace(src=function_def_renames[token.offset])

      if token.offset in token_renames:
          tokens[i] = tokens[i]._replace(src=token_renames[token.offset])

      if token.offset in member_renames:
          counter = i
          while tokens[counter].src != ".":
              counter += 1
          tokens[counter + 1] = tokens[counter + 1]._replace(src=member_renames[token.offset])

      if token.offset in fix_qt_enums:
          assert tokens[i + 1].src == "."
          _class, enum_name, value = fix_qt_enums[token.offset]
          # make sure we CAN import enum!
          try:
              eval(f"{_class}.{enum_name}.{value}")
              tokens[i + 2] = tokens[i + 2]._replace(src=f"{enum_name}.{tokens[i + 2].src}")
          except AttributeError:
              # let's see if we can find what the replacement should be automatically...
              # print(f'Trying to find {_class}.{value}.')
              actual = eval(f"{_class}.{value}")
              # print(f'Trying to find aliases for {actual.__class__}.')
              obj = globals()[_class]
              recovered = False
              if isinstance(obj, type):
                  for attr_name in dir(obj):
                      try:
                          attr = getattr(obj, attr_name)
                          if attr is actual.__class__:
                              # print(f'Found alias {_class}.{attr_name}')
                              recovered = True
                              tokens[i + 2] = tokens[i + 2]._replace(
                                  src=f"{attr_name}.{tokens[i + 2].src}"
                              )

                      except AttributeError:
                          continue
              if not recovered:
                  sys.stderr.write(
                      f"{filename}:{token.line}:{token.utf8_byte_offset} ERROR: wanted to replace with {_class}.{enum_name}.{value}, but does not exist\n"
                  )
              continue

      if token.offset in rename_qt_enums:
          assert tokens[i + 1].src == "."
          enum_name = deprecated_renamed_enums[(tokens[i].src, tokens[i + 2].src)]
          assert enum_name
          tokens[i + 2] = tokens[i + 2]._replace(src=f"{enum_name[0]}.{enum_name[1]}")

  new_contents = tokens_to_src(tokens)
  with open(filename, "w") as f:
      f.write(new_contents)

  return new_contents != contents


def get_class_enums(item, depth):  # @troopa81: add depth arg
  if not inspect.isclass(item):
      return

  if depth >= 5:  # @troopa81: return to avoid python error
      return

  # enums might be referenced using a subclass instead of their
  # parent class, so we need to loop through all those too...
  def all_subclasses(cls):
      if cls is object:
          return set()
      return {cls}.union(s for c in cls.__subclasses__() for s in all_subclasses(c))

  matched_classes = {item}.union(all_subclasses(item))

  for key, value in item.__dict__.items():
      if inspect.isclass(value) and type(value).__name__ == "EnumType":
          for ekey, evalue in value.__dict__.items():
              for matched_class in matched_classes:
                  if isinstance(evalue, value):
                      try:
                          test_value = getattr(item, str(ekey))
                          if not issubclass(type(test_value), Enum):
                              # There's a naming clash between an enum value (Eg QgsAggregateMappingModel.ColumnDataIndex.Aggregate)
                              # and a class (QgsAggregateMappingModel.Aggregate)
                              # So don't do any upgrades for these values, as current code will always be referring
                              # to the CLASS
                              continue
                      except AttributeError:
                          pass

                      if (matched_class.__name__, ekey) in ambiguous_enums:
                          if (
                              value.__name__
                              not in ambiguous_enums[(matched_class.__name__, ekey)]
                          ):
                              ambiguous_enums[(matched_class.__name__, ekey)].add(value.__name__)
                          continue

                      existing_entry = qt_enums.get((matched_class.__name__, ekey))
                      if existing_entry != value.__name__ and existing_entry:
                          ambiguous_enums[(matched_class.__name__, ekey)].add(existing_entry)
                          ambiguous_enums[(matched_class.__name__, ekey)].add(value.__name__)
                          del qt_enums[(matched_class.__name__, ekey)]
                      else:
                          qt_enums[(matched_class.__name__, ekey)] = f"{value.__name__}"

      elif inspect.isclass(value):
          # @troopa81: depth counter
          depth += 1
          get_class_enums(value, depth)


def main(argv: Sequence[str] | None = None) -> int:
  parser = argparse.ArgumentParser()
  parser.add_argument("directory")
  parser.add_argument(
      "--qgis3-incompatible-changes",
      action="store_true",
      help="Apply modifications that would break behavior on QGIS 3, hence code may not work on QGIS 3",
  )
  args = parser.parse_args(argv)

  # get all scope for all qt enum
  for module in target_modules:
      for key, value in module.__dict__.items():
          # @troopa81: depth counter init + print value
          depth = 0
          print(f"Get enums for {value}")
          get_class_enums(value, depth)

  ret = 0
  for filename in glob.glob(os.path.join(args.directory, "**/*.py"), recursive=True):
      print(f"Processing {filename}")
      if "auto_additions" in filename:
          continue

      ret |= fix_file(filename, not args.qgis3_incompatible_changes)
  return ret


if __name__ == "__main__":
  raise SystemExit(main())

Script executed from VSCode on Windows in a powershell terminal and venv:

C:\OSGeo4W\bin\python-qgis.bat -m venv --system-site-packages .venv
C:\OSGeo4W\bin\python-qgis.bat -c "import pathlib;import qgis;print(str((pathlib.Path(qgis.__file__)/'../..').resolve()))" > .venv\qgis.pth

.venv\Lib\site-packages\sitecustomize.py

import os

os.add_dll_directory("C:/OSGeo4W/bin")
os.add_dll_directory("C:/OSGeo4W/apps/qgis/bin")
os.add_dll_directory("C:/OSGeo4W/apps/Qt5/bin")

.venv\pyvenv.cfg

home = C:\OSGeo4W\apps\Python312
include-system-site-packages = true
version = 3.12.6
executable = C:\OSGeo4W\apps\Python312\python.exe
command = C:\OSGeo4W\apps\Python312\python.exe -m venv --system-site-packages D:\_QGIS\PLUGINS\isl_box\.venv

image

@nicogodet
Copy link
Member

@troopa81 I found something
I added 2 prints
image

When it reaches module qgis.core:

Get enums for <class 'qgis._core.Qgis'>
dict_items([('__module__', 'qgis._core'), [...], ('AnnotationItemFlags', <class 'qgis._core.Qgis.AnnotationItemFlags'>), [...]}

qgis._core.Qgis has an item which is a class so if inspect.isclass(value) and type(value).__name__ == "EnumType": fails and recursive call starts here as it tries to get enums for this class.

dict_items([('__module__', 'qgis._core'), ('__hash__', <slot wrapper '__hash__' of 'AnnotationItemFlags' objects>), ('__lt__', <slot wrapper '__lt__' of 'AnnotationItemFlags' objects>), ('__le__', <slot wrapper '__le__' of 'AnnotationItemFlags' objects>), ('__eq__', <slot wrapper '__eq__' of 'AnnotationItemFlags' objects>), ('__ne__', <slot wrapper '__ne__' of 'AnnotationItemFlags' objects>), ('__gt__', <slot wrapper '__gt__' of 'AnnotationItemFlags' objects>), ('__ge__', <slot wrapper '__ge__' of 'AnnotationItemFlags' objects>), ('__bool__', <slot wrapper '__bool__' of 'AnnotationItemFlags' objects>), ('__invert__', <slot wrapper '__invert__' of 'AnnotationItemFlags' objects>), ('__and__', <slot wrapper '__and__' of 'AnnotationItemFlags' objects>), ('__rand__', <slot wrapper '__rand__' of 'AnnotationItemFlags' objects>), ('__xor__', <slot wrapper '__xor__' of 'AnnotationItemFlags' objects>), ('__rxor__', <slot wrapper '__rxor__' of 'AnnotationItemFlags' objects>), ('__or__', <slot wrapper '__or__' of 'AnnotationItemFlags' objects>), ('__ror__', <slot wrapper '__ror__' of 'AnnotationItemFlags' objects>), ('__int__', <slot wrapper '__int__' of 'AnnotationItemFlags' objects>), ('__iand__', <slot wrapper '__iand__' of 'AnnotationItemFlags' objects>), ('__ixor__', <slot wrapper '__ixor__' of 'AnnotationItemFlags' objects>), ('__ior__', <slot wrapper '__ior__' of 'AnnotationItemFlags' objects>), ('__index__', <slot wrapper '__index__' of 'AnnotationItemFlags' objects>), ('__weakref__', <attribute '__weakref__' of 'AnnotationItemFlags' objects>), ('__doc__', 'Qgis.AnnotationItemFlags()\nQgis.AnnotationItemFlags(f: Union[Qgis.AnnotationItemFlags, Qgis.AnnotationItemFlag])\nQgis.AnnotationItemFlags(a0: Qgis.AnnotationItemFlags)'), ('baseClass', <class 'qgis._core.Qgis'>)])

Removing useless items

dict_items([('__module__', 'qgis._core'),[...], ('baseClass', <class 'qgis._core.Qgis'>)])

Found a class !
Try to get enums for this class qgis._core.Qgis
items of qgis._core.Qgis contains a class which is not Enum, try to get enums for this class, ............

I added a condition in the loop

if key == "baseClass":
    continue

And no more recursive error

troopa81 added a commit to troopa81/QGIS that referenced this issue Sep 18, 2024
baseClass is an attribute added by sipify script
Fixes qgis#58659
@troopa81
Copy link
Contributor

@nicogodet Your proposition was the good one, we add baseClass item in sipify script mainly because we need it later so we need to avoid looping on it.

3nids pushed a commit that referenced this issue Sep 18, 2024
baseClass is an attribute added by sipify script
Fixes #58659
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Either a bug report, or a bug fix. Let's hope for the latter! Feedback Waiting on the submitter for answers
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants