#6936 closed defect (fixed)
SpinBox Return keys forwarded to command line
| Reported by: | Tristan Croll | Owned by: | Eric Pettersen |
|---|---|---|---|
| Priority: | normal | Milestone: | |
| Component: | UI | Version: | |
| Keywords: | Cc: | chimerax-programmers | |
| Blocked By: | Blocking: | ||
| Notify when closed: | Platform: | all | |
| Project: | ChimeraX |
Description
The following bug report has been submitted:
Platform: Windows-10-10.0.19041
ChimeraX Version: 1.4rc202205111743 (2022-05-11 17:43:38 UTC)
Description
Typed a value into a `QDoubleSpinBox` in the new ISOLDE GUI (while docked in the side panel); when I pressed return on that it also executed the current command in the command line.
Log:
> isolde shorthand
Initialising ISOLDE-specific command aliases:
Alias Equivalent full command
-------------------------------------------------
st isolde step {arguments}
aw isolde add water {arguments}
awsf isolde add water {arguments} sim false
al isolde add ligand {arguments}
aa isolde add aa $1 sel {arguments}
ht isolde mod his sel {arguments}
so setattr sel atoms occupancy {arguments}
ab isolde adjust bfactors {arguments}
ss isolde sim start sel
rt isolde release torsions sel {arguments}
rd isolde release distances sel {arguments}
ra rd; rt
pf isolde pepflip sel
cf isolde cisflip sel
cbb color bfactor {arguments}
cbo color byattr occupancy {arguments}
cbc color {arguments} bychain; color {arguments} byhet
cs clipper set contourSensitivity {arguments}
UCSF ChimeraX version: 1.4rc202205111743 (2022-05-11)
© 2016-2022 Regents of the University of California. All rights reserved.
How to cite UCSF ChimeraX
> isolde demo crystal_intro
> set selectionWidth 4
before.pdb title:
Crystal structure of etub from clostridium kluyveri [more info...]
Chain information for before.pdb #1
---
Chain | Description | UniProt
A | predicted microcompartment protein | A5N734_CLOK5
before.pdb title:
Crystal structure of etub from clostridium kluyveri [more info...]
Chain information for before.pdb
---
Chain | Description | UniProt
1.2/A | predicted microcompartment protein | A5N734_CLOK5
WARNING: multiple experimental reflection datasets found:
(dataset) FOBS, SIGFOBS,
(dataset) IOBS, SIGIOBS,
(dataset) DANO, SIGDANO,
(dataset) F(+), SIGF(+), F(-), SIGF(-),
(dataset) I(+), SIGI(+), I(-), SIGI(-)
Automatically choosing "(dataset) FOBS, SIGFOBS".
Opened (LIVE) 2mFo-DFc as #1.1.1.2, grid size 36,36,34, pixel 0.723, shown at
level 0.303, step 1, values float32
Opened (LIVE) mFo-DFc as #1.1.1.3, grid size 36,36,34, pixel 0.723, shown at
level -0.0575,0.0575, step 1, values float32
Opened (LIVE) 2mFo-DFc_sharp_29 as #1.1.1.4, grid size 36,36,34, pixel 0.723,
shown at level 0.603, step 1, values float32
ISOLDE: Checking and correcting nomenclature for (pseudo)symmetric side
chains...
ISOLDE: Corrected atom nomenclature of 12 residues in model #1.2 to IUPAC-IUB
standards.
Opened (LIVE) MDFF potential as #1.1.1.5, grid size 36,36,34, pixel 0.723,
shown at level 0.366, step 1, values float32
Loaded crystallographic demo: PDB ID 3io0
> isolde sim start sel
ISOLDE: started sim
> select clear
> isolde demo crystal_intro
before.pdb title:
Crystal structure of etub from clostridium kluyveri [more info...]
Chain information for before.pdb #2
---
Chain | Description | UniProt
A | predicted microcompartment protein | A5N734_CLOK5
before.pdb title:
Crystal structure of etub from clostridium kluyveri [more info...]
Chain information for before.pdb
---
Chain | Description | UniProt
2.2/A | predicted microcompartment protein | A5N734_CLOK5
WARNING: multiple experimental reflection datasets found:
(dataset) FOBS, SIGFOBS,
(dataset) IOBS, SIGIOBS,
(dataset) DANO, SIGDANO,
(dataset) F(+), SIGF(+), F(-), SIGF(-),
(dataset) I(+), SIGI(+), I(-), SIGI(-)
Automatically choosing "(dataset) FOBS, SIGFOBS".
Opened (LIVE) 2mFo-DFc as #2.1.1.2, grid size 36,36,34, pixel 0.723, shown at
level 0.303, step 1, values float32
Opened (LIVE) mFo-DFc as #2.1.1.3, grid size 36,36,34, pixel 0.723, shown at
level -0.0567,0.0567, step 1, values float32
Opened (LIVE) 2mFo-DFc_sharp_29 as #2.1.1.4, grid size 36,36,34, pixel 0.723,
shown at level 0.603, step 1, values float32
Loaded crystallographic demo: PDB ID 3io0
> close #2
Deleting Crystallographic maps (3io0-sf.mtz)
Deleting (LIVE) 2mFo-DFc
Deleting (LIVE) mFo-DFc
Deleting (LIVE) 2mFo-DFc_sharp_29
> isolde demo crystal_intro
before.pdb title:
Crystal structure of etub from clostridium kluyveri [more info...]
Chain information for before.pdb #2
---
Chain | Description | UniProt
A | predicted microcompartment protein | A5N734_CLOK5
before.pdb title:
Crystal structure of etub from clostridium kluyveri [more info...]
Chain information for before.pdb
---
Chain | Description | UniProt
2.2/A | predicted microcompartment protein | A5N734_CLOK5
WARNING: multiple experimental reflection datasets found:
(dataset) FOBS, SIGFOBS,
(dataset) IOBS, SIGIOBS,
(dataset) DANO, SIGDANO,
(dataset) F(+), SIGF(+), F(-), SIGF(-),
(dataset) I(+), SIGI(+), I(-), SIGI(-)
Automatically choosing "(dataset) FOBS, SIGFOBS".
Opened (LIVE) 2mFo-DFc as #2.1.1.2, grid size 36,36,34, pixel 0.723, shown at
level 0.303, step 1, values float32
Opened (LIVE) mFo-DFc as #2.1.1.3, grid size 36,36,34, pixel 0.723, shown at
level -0.0572,0.0572, step 1, values float32
Opened (LIVE) 2mFo-DFc_sharp_29 as #2.1.1.4, grid size 36,36,34, pixel 0.723,
shown at level 0.603, step 1, values float32
Loaded crystallographic demo: PDB ID 3io0
> close #2
Deleting Crystallographic maps (3io0-sf.mtz)
Deleting (LIVE) 2mFo-DFc
Deleting (LIVE) mFo-DFc
Deleting (LIVE) 2mFo-DFc_sharp_29
> isolde sim pause
> isolde sim resume
> isolde sim pause
OpenGL version: 3.3.0 NVIDIA 497.29
OpenGL renderer: NVIDIA GeForce RTX 2080/PCIe/SSE2
OpenGL vendor: NVIDIA Corporation
Python: 3.9.11
Locale: en_GB.cp1252
Qt version: PyQt6 6.3.0, Qt 6.3.0
Qt runtime version: 6.3.0
Qt platform: windows
Manufacturer: Notebook
Model: P7xxTM1
OS: Microsoft Windows 10 Education (Build 19041)
Memory: 68,654,501,888
MaxProcessMemory: 137,438,953,344
CPU: 16 Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz
OSLanguage: en-GB
Installed Packages:
-: imerax-isolde
-.imerax-isolde: 1.4.dev0
-himerax-isolde: 1.4.dev0
-imerax-isolde: 1.4.dev0
alabaster: 0.7.12
appdirs: 1.4.4
Babel: 2.10.1
backcall: 0.2.0
blockdiag: 3.0.0
certifi: 2021.10.8
cftime: 1.6.0
charset-normalizer: 2.0.12
ChimeraX-AddCharge: 1.2.3
ChimeraX-AddH: 2.1.11
ChimeraX-AlignmentAlgorithms: 2.0
ChimeraX-AlignmentHdrs: 3.2.1
ChimeraX-AlignmentMatrices: 2.0
ChimeraX-Alignments: 2.4.3
ChimeraX-AlphaFold: 1.0
ChimeraX-AltlocExplorer: 1.0.2
ChimeraX-AmberInfo: 1.0
ChimeraX-Arrays: 1.0
ChimeraX-Atomic: 1.39.1
ChimeraX-AtomicLibrary: 7.0
ChimeraX-AtomSearch: 2.0.1
ChimeraX-AxesPlanes: 2.1
ChimeraX-BasicActions: 1.1
ChimeraX-BILD: 1.0
ChimeraX-BlastProtein: 2.1.1
ChimeraX-BondRot: 2.0
ChimeraX-BugReporter: 1.0
ChimeraX-BuildStructure: 2.7
ChimeraX-Bumps: 1.0
ChimeraX-BundleBuilder: 1.1
ChimeraX-ButtonPanel: 1.0
ChimeraX-CageBuilder: 1.0
ChimeraX-CellPack: 1.0
ChimeraX-Centroids: 1.2
ChimeraX-ChemGroup: 2.0
ChimeraX-Clashes: 2.2.4
ChimeraX-Clipper: 0.18.0
ChimeraX-ColorActions: 1.0
ChimeraX-ColorGlobe: 1.0
ChimeraX-ColorKey: 1.5.1
ChimeraX-CommandLine: 1.2.3
ChimeraX-ConnectStructure: 2.0.1
ChimeraX-Contacts: 1.0
ChimeraX-Core: 1.4rc202205111743
ChimeraX-CoreFormats: 1.1
ChimeraX-coulombic: 1.3.2
ChimeraX-Crosslinks: 1.0
ChimeraX-Crystal: 1.0
ChimeraX-CrystalContacts: 1.0
ChimeraX-DataFormats: 1.2.2
ChimeraX-Dicom: 1.1
ChimeraX-DistMonitor: 1.1.5
ChimeraX-Dssp: 2.0
ChimeraX-EMDB-SFF: 1.0
ChimeraX-ExperimentalCommands: 1.0
ChimeraX-FileHistory: 1.0
ChimeraX-FunctionKey: 1.0
ChimeraX-Geometry: 1.2
ChimeraX-gltf: 1.0
ChimeraX-Graphics: 1.1
ChimeraX-Hbonds: 2.1.2
ChimeraX-Help: 1.2
ChimeraX-HKCage: 1.3
ChimeraX-IHM: 1.1
ChimeraX-ImageFormats: 1.2
ChimeraX-IMOD: 1.0
ChimeraX-IO: 1.0.1
ChimeraX-ISOLDE: 1.4.dev0
ChimeraX-ItemsInspection: 1.0
ChimeraX-Label: 1.1.1
ChimeraX-ListInfo: 1.1.1
ChimeraX-Log: 1.1.5
ChimeraX-LookingGlass: 1.1
ChimeraX-Maestro: 1.8.1
ChimeraX-Map: 1.1
ChimeraX-MapData: 2.0
ChimeraX-MapEraser: 1.0
ChimeraX-MapFilter: 2.0
ChimeraX-MapFit: 2.0
ChimeraX-MapSeries: 2.1
ChimeraX-Markers: 1.0
ChimeraX-Mask: 1.0
ChimeraX-MatchMaker: 2.0.6
ChimeraX-MDcrds: 2.6
ChimeraX-MedicalToolbar: 1.0.1
ChimeraX-Meeting: 1.0
ChimeraX-MLP: 1.1
ChimeraX-mmCIF: 2.7
ChimeraX-MMTF: 2.1
ChimeraX-Modeller: 1.5.5
ChimeraX-ModelPanel: 1.3.2
ChimeraX-ModelSeries: 1.0
ChimeraX-Mol2: 2.0
ChimeraX-Morph: 1.0
ChimeraX-MouseModes: 1.1
ChimeraX-Movie: 1.0
ChimeraX-Neuron: 1.0
ChimeraX-Nucleotides: 2.0.2
ChimeraX-OpenCommand: 1.9
ChimeraX-PDB: 2.6.6
ChimeraX-PDBBio: 1.0
ChimeraX-PDBLibrary: 1.0.2
ChimeraX-PDBMatrices: 1.0
ChimeraX-PickBlobs: 1.0
ChimeraX-Positions: 1.0
ChimeraX-PresetMgr: 1.1
ChimeraX-PubChem: 2.1
ChimeraX-ReadPbonds: 1.0.1
ChimeraX-Registration: 1.1
ChimeraX-RemoteControl: 1.0
ChimeraX-ResidueFit: 1.0
ChimeraX-RestServer: 1.1
ChimeraX-RNALayout: 1.0
ChimeraX-RotamerLibMgr: 2.0.1
ChimeraX-RotamerLibsDunbrack: 2.0
ChimeraX-RotamerLibsDynameomics: 2.0
ChimeraX-RotamerLibsRichardson: 2.0
ChimeraX-SaveCommand: 1.5
ChimeraX-SchemeMgr: 1.0
ChimeraX-SDF: 2.0
ChimeraX-Segger: 1.0
ChimeraX-Segment: 1.0
ChimeraX-SelInspector: 1.0
ChimeraX-SeqView: 2.6
ChimeraX-Shape: 1.0.1
ChimeraX-Shell: 1.0
ChimeraX-Shortcuts: 1.1
ChimeraX-ShowAttr: 1.0
ChimeraX-ShowSequences: 1.0
ChimeraX-SideView: 1.0
ChimeraX-Smiles: 2.1
ChimeraX-SmoothLines: 1.0
ChimeraX-SpaceNavigator: 1.0
ChimeraX-StdCommands: 1.8
ChimeraX-STL: 1.0
ChimeraX-Storm: 1.0
ChimeraX-StructMeasure: 1.0.1
ChimeraX-Struts: 1.0.1
ChimeraX-Surface: 1.0
ChimeraX-SwapAA: 2.0
ChimeraX-SwapRes: 2.1.1
ChimeraX-TapeMeasure: 1.0
ChimeraX-Test: 1.0
ChimeraX-Toolbar: 1.1.1
ChimeraX-ToolshedUtils: 1.2.1
ChimeraX-Tug: 1.0
ChimeraX-UI: 1.18.2
ChimeraX-uniprot: 2.2
ChimeraX-UnitCell: 1.0
ChimeraX-ViewDockX: 1.1.2
ChimeraX-VIPERdb: 1.0
ChimeraX-Vive: 1.1
ChimeraX-VolumeMenu: 1.0
ChimeraX-VTK: 1.0
ChimeraX-WavefrontOBJ: 1.0
ChimeraX-WebCam: 1.0
ChimeraX-WebServices: 1.1.0
ChimeraX-Zone: 1.0
colorama: 0.4.4
comtypes: 1.1.10
cxservices: 1.2
cycler: 0.11.0
Cython: 0.29.26
debugpy: 1.6.0
decorator: 5.1.1
docutils: 0.17.1
entrypoints: 0.4
filelock: 3.4.2
fonttools: 4.33.3
funcparserlib: 1.0.0
grako: 3.16.5
h5py: 3.6.0
html2text: 2020.1.16
idna: 3.3
ihm: 0.27
imagecodecs: 2021.11.20
imagesize: 1.3.0
ipykernel: 6.6.1
ipython: 7.31.1
ipython-genutils: 0.2.0
jedi: 0.18.1
Jinja2: 3.0.3
jupyter-client: 7.1.0
jupyter-core: 4.10.0
kiwisolver: 1.4.2
line-profiler: 3.4.0
lxml: 4.7.1
lz4: 3.1.10
MarkupSafe: 2.1.1
matplotlib: 3.5.1
matplotlib-inline: 0.1.3
msgpack: 1.0.3
nest-asyncio: 1.5.5
netCDF4: 1.5.8
networkx: 2.6.3
numexpr: 2.8.1
numpy: 1.22.1
openvr: 1.16.802
packaging: 21.3
ParmEd: 3.4.3
parso: 0.8.3
pickleshare: 0.7.5
Pillow: 9.0.1
pip: 21.3.1
pkginfo: 1.8.2
prompt-toolkit: 3.0.29
psutil: 5.9.0
pycollada: 0.7.2
pydicom: 2.2.2
Pygments: 2.11.2
PyOpenGL: 3.1.5
PyOpenGL-accelerate: 3.1.5
pyparsing: 3.0.9
PyQt6-commercial: 6.3.0
PyQt6-Qt6: 6.3.0
PyQt6-sip: 13.3.1
PyQt6-WebEngine-commercial: 6.3.0
PyQt6-WebEngine-Qt6: 6.3.0
python-dateutil: 2.8.2
pytz: 2022.1
pywin32: 303
pyzmq: 22.3.0
qtconsole: 5.3.0
QtPy: 2.1.0
RandomWords: 0.3.0
requests: 2.27.1
scipy: 1.7.3
setuptools: 59.8.0
sfftk-rw: 0.7.2
six: 1.16.0
snowballstemmer: 2.2.0
sortedcontainers: 2.4.0
Sphinx: 4.3.2
sphinx-autodoc-typehints: 1.15.2
sphinxcontrib-applehelp: 1.0.2
sphinxcontrib-blockdiag: 3.0.0
sphinxcontrib-devhelp: 1.0.2
sphinxcontrib-htmlhelp: 2.0.0
sphinxcontrib-jsmath: 1.0.1
sphinxcontrib-qthelp: 1.0.3
sphinxcontrib-serializinghtml: 1.1.5
suds-community: 1.0.0
tables: 3.7.0
tifffile: 2021.11.2
tinyarray: 1.2.4
tornado: 6.1
traitlets: 5.2.0
urllib3: 1.26.9
wcwidth: 0.2.5
webcolors: 1.11.1
wheel: 0.37.1
wheel-filename: 1.3.0
WMI: 1.5.1
Change History (8)
comment:1 by , 3 years ago
| Component: | Unassigned → UI |
|---|---|
| Owner: | set to |
| Platform: | → all |
| Project: | → ChimeraX |
| Status: | new → accepted |
| Summary: | ChimeraX bug report submission → SpinBox Return keys forwarded to command line |
comment:2 by , 3 years ago
| Cc: | added |
|---|
follow-up: 3 comment:3 by , 3 years ago
follow-up: 4 comment:4 by , 3 years ago
I'd be inclined to put this fix in the daily build (ChimeraX 1.5) and not in ChimeraX 1.4. Our plan was to release 1.4 this week so fixes for rare problems should probably not go in.
comment:5 by , 3 years ago
Looks like something I could easily patch specifically into ISOLDE's GUI for the time being.
comment:6 by , 3 years ago
Okay, daily build only it is then.
Tristan, I don't think it will be easy for you to use the approach in the diff, because that is in code "above" your tool code, where the Return key has made its way to the surrounding ToolWindow and it's deciding whether to forward it on to the command line. I mean it's possible, it's just that there's a couple simpler / more direct approaches.
One is to use a chimerax.ui.options.FloatOption instead of a QDoubleSpinBox directly. Most ChimeraX interfaces use options instead of input widgets directly which is why it took this long to notice that QSpinBox suffers from the same problem as QLineEdit and QComboBox. The value of the option is its .value attribute. Options are designed to be laid out vertically in two columns: one labels, and one widgets. Containers to handle option layout are in chimerax.ui.options.containers.
If learning/using options is just to much at this stage, you could use the same approach that FloatOption uses to prevent the Return key from propagating: override the event() method. Looks at the NZDoubleSpinBox embedded class in chimerax.ui.options.options.py .
comment:7 by , 3 years ago
| Resolution: | → fixed |
|---|---|
| Status: | accepted → closed |
Okay, fix committed to daily build
comment:8 by , 3 years ago
For the time being I've just overridden the event method as per your suggestion. The options approach definitely looks like something I should pay attention to - but I'd like to get this current effort finished and released first, and there is still a lot to sort out.
The issue is that widgets such as QLineEdit, QComboBox, and various QSpinBox classes (basically classes with an embedded line editor) don't "eat" a Return key typed into the widget and therefore the key gets forwarded to the command line. ChimeraX already filters Return keys coming QLineEdits and QComboBoxes. I propose doing the same for QSpinBox classes, but feel I need buy-in from the team before committing this to the branch at this late date. The diff is below. What say you? --Eric iMac:/Users/pett/src/chimerax/src/bundles/ui<23> git diff diff --git a/src/bundles/ui/src/gui.py b/src/bundles/ui/src/gui.py index b5e64d3d7..060d033bd 100644 --- a/src/bundles/ui/src/gui.py +++ b/src/bundles/ui/src/gui.py @@ -2215,8 +2215,9 @@ class ToolWindow(StatusLogger): # Since forwarding keystrokes can shift the keyboard focus, don't forward keys that # are "unhandled" if those keys only change keyboard state (e.g. CapsLock). Important # for the Python Shell retaining focus. - from Qt.QtWidgets import QLineEdit, QComboBox - if not self.floating and not isinstance(self.ui_area.focusWidget(), (QLineEdit, QComboBox)) \ + from Qt.QtWidgets import QLineEdit, QComboBox, QAbstractSpinBox + if not self.floating \ + and not isinstance(self.ui_area.focusWidget(), (QLineEdit, QComboBox, QAbstractSpinBox)) \ and event.key() not in keyboard_state_keys: self.tool_instance.session.ui.forward_keystroke(event)