#18360 closed defect (fixed)
PySide6: AttributeError: 'AtomicStructureListWidget' object has no attribute 'SingleSelection'
Reported by: | Eric Pettersen | Owned by: | Zach Pearson |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | Window Toolkit | Version: | |
Keywords: | Cc: | chimerax-programmers | |
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
The following bug report has been submitted: Platform: macOS-15.5-arm64-arm-64bit ChimeraX Version: 1.11.dev202508010600 (2025-08-01 06:00:49 UTC) Description Another PySide problem Log: UCSF ChimeraX version: 1.11.dev202508010600 (2025-08-01) © 2016-2025 Regents of the University of California. All rights reserved. How to cite UCSF ChimeraX > open 1mtx 1mtx title: Determination of the three-dimensional structure of margatoxin by 1H, 13C, 15N triple-resonance nuclear magnetic resonance spectroscopy [more info...] Chain information for 1mtx --- Chain | Description | UniProt 1.1/A 1.2/A 1.3/A 1.4/A 1.5/A 1.6/A 1.7/A 1.8/A 1.9/A 1.10/A 1.11/A 1.12/A 1.13/A 1.14/A 1.15/A 1.16/A 1.17/A 1.18/A 1.19/A 1.20/A 1.21/A 1.22/A 1.23/A | MARGATOXIN | SCKM_CENMA 1-39 > ui tool show Matchmaker Traceback (most recent call last): File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/core/toolshed/info.py", line 571, in start_tool ti = api._api_caller.start_tool(api, session, self, tool_info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/core/toolshed/__init__.py", line 1400, in start_tool return cls._get_func(api, "start_tool")(session, ti.name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/match_maker/__init__.py", line 44, in start_tool return MatchMakerTool(session, tool_name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/match_maker/tool.py", line 58, in __init__ self.ref_structure_list = AtomicStructureListWidget(session, selection_mode='single') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/atomic/widgets.py", line 40, in __init__ super().__init__(session, class_filter=AtomicStructure, **kw) File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/ui/widgets/item_chooser.py", line 298, in __init__ super().__init__(**_process_model_kw(session, **kw)) File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/ui/widgets/item_chooser.py", line 117, in __init__ self.setSelectionMode({'single': self.SingleSelection, 'extended': self.ExtendedSelection, ^^^^^^^^^^^^^^^^^^^^ AttributeError: 'AtomicStructureListWidget' object has no attribute 'SingleSelection' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/ui/gui.py", line 1891, in <lambda> run(ses, "ui tool show %s" % StringArg.unparse(tool_name))) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/core/commands/run.py", line 49, in run results = command.run(text, log=log, return_json=return_json) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/core/commands/cli.py", line 3230, in run result = ci.function(session, **kw_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/ui/cmd.py", line 219, in ui_tool_show return bi.start_tool(session, name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/core/toolshed/info.py", line 578, in start_tool raise ToolshedError( chimerax.core.toolshed.ToolshedError: start_tool() failed for tool Matchmaker in bundle ChimeraX-MatchMaker: 'AtomicStructureListWidget' object has no attribute 'SingleSelection' chimerax.core.toolshed.ToolshedError: start_tool() failed for tool Matchmaker in bundle ChimeraX-MatchMaker: 'AtomicStructureListWidget' object has no attribute 'SingleSelection' File "/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site- packages/chimerax/core/toolshed/info.py", line 578, in start_tool raise ToolshedError( See log for complete Python traceback. OpenGL version: 4.1 Metal - 89.4 OpenGL renderer: Apple M1 Max OpenGL vendor: Apple Python: 3.11.9 Locale: en_US.UTF-8 Qt version: PySide6 6.9.1, Qt 6.9.1 Qt runtime version: 6.9.1 Qt platform: cocoa Hardware: Hardware Overview: Model Name: Mac Studio Model Identifier: Mac13,1 Model Number: Z14J0008FLL/A Chip: Apple M1 Max Total Number of Cores: 10 (8 performance and 2 efficiency) Memory: 32 GB System Firmware Version: 11881.121.1 OS Loader Version: 11881.121.1 Software: System Software Overview: System Version: macOS 15.5 (24F74) Kernel Version: Darwin 24.5.0 Time since boot: 73 days, 17 hours, 13 minutes Graphics/Displays: Apple M1 Max: Chipset Model: Apple M1 Max Type: GPU Bus: Built-In Total Number of Cores: 24 Vendor: Apple (0x106b) Metal Support: Metal 3 Displays: PHL 279P1: Resolution: 5120 x 2880 (5K/UHD+ - Ultra High Definition Plus) UI Looks like: 2560 x 1440 @ 60.00Hz Main Display: Yes Mirror: Off Online: Yes Rotation: Supported Installed Packages: alabaster: 1.0.0 appdirs: 1.4.4 appnope: 0.1.4 asttokens: 3.0.0 babel: 2.17.0 beautifulsoup4: 4.13.4 blockdiag: 3.0.0 blosc2: 3.6.1 build: 1.2.2.post1 certifi: 2025.7.14 cftime: 1.6.4.post1 charset-normalizer: 3.4.2 ChimeraX-AddCharge: 1.5.19 ChimeraX-AddH: 2.2.7 ChimeraX-AlignmentAlgorithms: 2.0.2 ChimeraX-AlignmentHdrs: 3.6.1 ChimeraX-AlignmentMatrices: 2.1 ChimeraX-Alignments: 3.0 ChimeraX-AlphaFold: 1.0.1 ChimeraX-AltlocExplorer: 1.1.2 ChimeraX-AmberInfo: 1.0 ChimeraX-Aniso: 1.3.2 ChimeraX-Arrays: 1.1 ChimeraX-Atomic: 1.60.10 ChimeraX-AtomicLibrary: 14.1.21 ChimeraX-AtomSearch: 2.0.1 ChimeraX-AxesPlanes: 2.4 ChimeraX-BasicActions: 1.1.3 ChimeraX-BILD: 1.0 ChimeraX-BlastProtein: 3.0.0 ChimeraX-Boltz: 1.1 ChimeraX-BondRot: 2.0.4 ChimeraX-BugReporter: 1.0.2 ChimeraX-BuildStructure: 2.13.1 ChimeraX-Bumps: 1.0 ChimeraX-BundleBuilder: 1.5.1 ChimeraX-ButtonPanel: 1.0.1 ChimeraX-CageBuilder: 1.0.1 ChimeraX-CellPack: 1.0 ChimeraX-Centroids: 1.4 ChimeraX-ChangeChains: 1.1 ChimeraX-CheckWaters: 1.5 ChimeraX-ChemGroup: 2.0.2 ChimeraX-Clashes: 2.3 ChimeraX-ColorActions: 1.0.5 ChimeraX-ColorGlobe: 1.0 ChimeraX-ColorKey: 1.5.8 ChimeraX-CommandLine: 1.3.0 ChimeraX-ConnectStructure: 2.0.1 ChimeraX-Contacts: 1.0.1 ChimeraX-Core: 1.11.dev202508010600 ChimeraX-CoreFormats: 1.2 ChimeraX-coulombic: 1.4.5 ChimeraX-Crosslinks: 1.0 ChimeraX-Crystal: 1.0 ChimeraX-CrystalContacts: 1.0.1 ChimeraX-DataFormats: 1.2.4 ChimeraX-Dicom: 1.2.7 ChimeraX-DistMonitor: 1.4.2 ChimeraX-DockPrep: 1.1.4 ChimeraX-Dssp: 2.0 ChimeraX-EMDB-SFF: 1.0 ChimeraX-ESMFold: 1.0 ChimeraX-FileHistory: 1.0.1 ChimeraX-FunctionKey: 1.0.1 ChimeraX-Geometry: 1.3 ChimeraX-gltf: 1.0 ChimeraX-Graphics: 1.4.1 ChimeraX-Hbonds: 2.5.3 ChimeraX-Help: 1.3 ChimeraX-HKCage: 1.3 ChimeraX-IHM: 1.1 ChimeraX-ImageFormats: 1.2 ChimeraX-IMOD: 1.0 ChimeraX-IO: 1.0.4 ChimeraX-ItemsInspection: 1.0.1 ChimeraX-IUPAC: 1.0 ChimeraX-KVFinder: 1.7.1 ChimeraX-Label: 1.1.14 ChimeraX-ListInfo: 1.2.2 ChimeraX-locscalesurfer: 0.1.1 ChimeraX-Log: 1.2 ChimeraX-LookingGlass: 1.1 ChimeraX-Maestro: 1.9.1 ChimeraX-Map: 1.3 ChimeraX-MapData: 2.0 ChimeraX-MapEraser: 1.0.1 ChimeraX-MapFilter: 2.0.1 ChimeraX-MapFit: 2.0 ChimeraX-MapSeries: 2.1.1 ChimeraX-Markers: 1.0.1 ChimeraX-Mask: 1.0.2 ChimeraX-MatchMaker: 2.2.2 ChimeraX-MCopy: 1.0 ChimeraX-MDcrds: 2.15 ChimeraX-MedicalToolbar: 1.1 ChimeraX-Meeting: 1.0.1 ChimeraX-Minimize: 1.1 ChimeraX-MLP: 1.1.1 ChimeraX-mmCIF: 2.16 ChimeraX-MMTF: 2.2 ChimeraX-ModelArchive: 1.0 ChimeraX-Modeller: 1.5.22 ChimeraX-ModelPanel: 1.5.1 ChimeraX-ModelSeries: 1.0.1 ChimeraX-Mol2: 2.0.3 ChimeraX-Mole: 1.0 ChimeraX-Morph: 1.0.2 ChimeraX-MouseModes: 1.2 ChimeraX-Movie: 1.0.1 ChimeraX-MutationScores: 1.0 ChimeraX-Neuron: 1.0 ChimeraX-Nifti: 1.2 ChimeraX-NMRSTAR: 1.0.2 ChimeraX-NRRD: 1.2 ChimeraX-Nucleotides: 2.0.3 ChimeraX-OpenCommand: 1.15.1 ChimeraX-OrthoPick: 1.0.1 ChimeraX-PDB: 2.7.10 ChimeraX-PDBBio: 1.0.1 ChimeraX-PDBLibrary: 1.0.4 ChimeraX-PDBMatrices: 1.0 ChimeraX-PickBlobs: 1.0.1 ChimeraX-Positions: 1.0 ChimeraX-PresetMgr: 1.1.3 ChimeraX-ProfileGrids: 1.1.4 ChimeraX-PubChem: 2.2 ChimeraX-ReadPbonds: 1.0.1 ChimeraX-Registration: 1.1.2 ChimeraX-RemoteControl: 1.0 ChimeraX-RenderByAttr: 1.6.4 ChimeraX-RenumberResidues: 1.1 ChimeraX-ResidueFit: 1.0.1 ChimeraX-RestServer: 1.3.1 ChimeraX-RNALayout: 1.0 ChimeraX-RotamerLibMgr: 4.0 ChimeraX-RotamerLibsDunbrack: 2.0 ChimeraX-RotamerLibsDynameomics: 2.0 ChimeraX-RotamerLibsRichardson: 2.0 ChimeraX-SaveCommand: 1.5.2 ChimeraX-SchemeMgr: 1.0 ChimeraX-SDF: 2.0.3 ChimeraX-Segger: 1.0 ChimeraX-Segment: 1.0.1 ChimeraX-Segmentations: 3.5.7 ChimeraX-SelInspector: 1.0 ChimeraX-SeqView: 2.17.2 ChimeraX-Shape: 1.1 ChimeraX-Shell: 1.0.1 ChimeraX-Shortcuts: 1.2.1 ChimeraX-ShowSequences: 1.0.3 ChimeraX-SideView: 1.0.1 ChimeraX-SimilarStructures: 1.0.1 ChimeraX-Smiles: 2.1.2 ChimeraX-SmoothLines: 1.0 ChimeraX-SpaceNavigator: 1.0 ChimeraX-StdCommands: 1.19.1 ChimeraX-STL: 1.0.1 ChimeraX-Storm: 1.0 ChimeraX-StructMeasure: 1.2.1 ChimeraX-Struts: 1.0.1 ChimeraX-Surface: 1.0.1 ChimeraX-SwapAA: 2.0.1 ChimeraX-SwapRes: 2.5.2 ChimeraX-TapeMeasure: 1.0 ChimeraX-TaskManager: 1.0 ChimeraX-Test: 1.0 ChimeraX-Toolbar: 1.2.3 ChimeraX-ToolshedUtils: 1.2.4 ChimeraX-Topography: 1.0 ChimeraX-ToQuest: 1.0 ChimeraX-Tug: 1.0.1 ChimeraX-UI: 1.47 ChimeraX-Umap: 1.0 ChimeraX-uniprot: 2.3.1 ChimeraX-UnitCell: 1.0.1 ChimeraX-ViewDock: 1.1 ChimeraX-VIPERdb: 1.0 ChimeraX-Vive: 1.1 ChimeraX-VolumeMenu: 1.0.1 ChimeraX-vrml: 1.0 ChimeraX-VTK: 1.0 ChimeraX-WavefrontOBJ: 1.0 ChimeraX-WebCam: 1.0.2 ChimeraX-WebServices: 1.1.5 ChimeraX-Zone: 1.0.1 colorama: 0.4.6 comm: 0.2.3 contourpy: 1.3.3 coverage: 7.10.1 cxservices: 1.2.3 cycler: 0.12.1 Cython: 3.1.2 debugpy: 1.8.15 decorator: 5.2.1 docutils: 0.21.2 einops: 0.3.2 executing: 2.2.0 filelock: 3.18.0 fonttools: 4.59.0 fsspec: 2025.5.0 funcparserlib: 2.0.0a0 glfw: 2.9.0 grako: 3.16.5 h5py: 3.14.0 html2text: 2024.2.26 idna: 3.10 ihm: 2.2 imagecodecs: 2024.6.1 imagesize: 1.4.1 iniconfig: 2.1.0 ipykernel: 6.29.5 ipython: 8.26.0 ipywidgets: 8.1.7 jedi: 0.19.1 Jinja2: 3.1.6 jupyter_client: 8.6.3 jupyter_core: 5.8.1 jupyterlab_widgets: 3.0.15 kiwisolver: 1.4.8 line_profiler: 5.0.0 lxml: 5.3.1 lz4: 4.3.2 Markdown: 3.8.2 MarkupSafe: 3.0.2 matplotlib: 3.10.1 matplotlib-inline: 0.1.7 mpmath: 1.3.0 mrcfile: 1.3.0 msgpack: 1.1.0 narwhals: 1.41.0 ndindex: 1.10.0 nest-asyncio: 1.6.0 netCDF4: 1.6.5 networkx: 3.3 nibabel: 5.2.0 nptyping: 2.5.0 numexpr: 2.11.0 numpy: 2.2.6 numpy: 1.26.4 OpenMM: 8.2.0 openvr: 1.26.701 packaging: 24.2 ParmEd: 4.2.2 parso: 0.8.4 pep517: 0.13.1 pexpect: 4.9.0 pickleshare: 0.7.5 pillow: 10.4.0 pip: 25.2 pkginfo: 1.11.1 platformdirs: 4.3.8 plotly: 6.0.1 pluggy: 1.6.0 prompt_toolkit: 3.0.51 psutil: 7.0.0 ptyprocess: 0.7.0 pure_eval: 0.2.3 py-cpuinfo: 9.0.0 pycollada: 0.8 pydicom: 2.4.4 Pygments: 2.18.0 pyKVFinder: 0.8.1 pynmrstar: 3.3.5 pynrrd: 1.0.0 PyOpenGL: 3.1.9 PyOpenGL-accelerate: 3.1.9 pyopenxr: 1.1.4501 pyparsing: 3.2.3 pyproject_hooks: 1.2.0 PySide6: 6.9.1 PySide6_Addons: 6.9.1 PySide6_Essentials: 6.9.1 pytest: 8.4.1 pytest-cov: 6.2.1 python-dateutil: 2.9.0.post0 pytz: 2025.2 pyzmq: 27.0.0 qtconsole: 5.5.2 QtPy: 2.4.3 qtshim: 1.1 RandomWords: 0.4.0 requests: 2.32.4 roman-numerals-py: 3.1.0 scipy: 1.10.1 scipy: 1.14.0 setuptools: 80.9.0 sfftk-rw: 0.8.1 shiboken6: 6.9.1 six: 1.17.0 snowballstemmer: 3.0.1 sortedcontainers: 2.4.0 soupsieve: 2.7 Sphinx: 8.2.3 sphinx-autodoc-typehints: 3.1.0 sphinxcontrib-applehelp: 2.0.0 sphinxcontrib-blockdiag: 3.0.0 sphinxcontrib-devhelp: 2.0.0 sphinxcontrib-htmlhelp: 2.1.0 sphinxcontrib-jsmath: 1.0.1 sphinxcontrib-qthelp: 2.0.0 sphinxcontrib-serializinghtml: 2.0.0 stack-data: 0.6.3 superqt: 0.7.5 sympy: 1.14.0 tables: 3.10.2 tcia_utils: 1.5.1 tifffile: 2025.3.13 timm: 0.4.12 tinyarray: 1.2.5 tomlkit: 0.13.2 torch: 2.2.2 torchvision: 0.17.2 tornado: 6.5.1 tqdm: 4.66.6 traitlets: 5.14.3 typing_extensions: 4.14.1 tzdata: 2025.2 urllib3: 2.5.0 wcwidth: 0.2.13 webcolors: 24.11.1 wheel: 0.45.1 wheel-filename: 1.4.2 widgetsnbextension: 4.0.14
Change History (8)
comment:1 by , 3 months ago
Cc: | added |
---|---|
Component: | Unassigned → Window Toolkit |
Owner: | set to |
Platform: | → all |
Project: | → ChimeraX |
Status: | new → assigned |
Summary: | ChimeraX bug report submission → PySide6: AttributeError: 'AtomicStructureListWidget' object has no attribute 'SingleSelection' |
comment:2 by , 3 months ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
comment:3 by , 3 months ago
Really? So instead of self.SingleSelection I have to use QAbstractItemView.SelectionMode.SingleSelection? Seems like a PITA.
comment:4 by , 3 months ago
It seems like if we are going to seriously use PySide6, we should have something in the shim equivalent to the promote_enums() call that we already do for PyQt6.
That would avoid these ridiculously long qualified names.
comment:5 by , 3 months ago
Well, no, now that I've reviewed QItemList, the SelectionMode enum is also in QItemList. I wasn't able to find it on that widget's page in PySide6's documentation. I guess if something inherits from something else they feel no need to duplicate documentation.
I don't see an equivalent promote_enums function from qtpy for PySide6, the project from which we took our current promote_enums function for PyQt. We'd have to write one.
I don't find the enums all that annoying. If you have a language server in your editor, self.Se<TAB>S<TAB> is even shorter than typing out SingleSelection.
comment:6 by , 3 months ago
My editor does not have a builtin language server, and suspect many extension developers wouldn't have one either. The whole point of having a shim is so that your code doesn't break when the shim switches from one toolkit to another, so we should strive to have code that worked when PyQt was under the hood also work when PySide6 is under the hood. So we should investigate implementing a PySide version of promote_enums(). It seemed doable after a cursory look at the PyQt version, but maybe I missed something. I can try to implement it tomorrow.
comment:7 by , 3 months ago
I reverted the previous patch, and added a promote_enums equivalent for PySide6 to the shim.
comment:8 by , 3 months ago
Excellent! This also saves us from playing whack-a-mole as users exercise lesser-used code paths that also have this problem over the coming weeks and months.
Using the enum from QAbstractItemView works for both PyQt6 and PySide6.