Skip to content

Update wxPython to 4.3.1 - #20882

Open
LeonarddeR wants to merge 1 commit into
nvaccess:masterfrom
LeonarddeR:updateWx
Open

LeonarddeR wants to merge 1 commit into
nvaccess:masterfrom
LeonarddeR:updateWx

Conversation

@LeonarddeR

@LeonarddeR LeonarddeR commented Sep 22, 2026

Copy link
Copy Markdown
Collaborator

Link to issue number:

Closes #20700

Summary of the issue:

NVDA uses wxPython 4.2.4, which is based on wxWidgets 3.2.8.
wxPython 4.3 is the new release series, based on wxWidgets 3.3.

Description of user facing changes:

None intended.
wxWidgets 3.3 changes the default look of some controls, such as tree views.

Description of developer facing changes:

  • wxPython is updated to 4.3.1, which is based on wxWidgets 3.3.3.
  • wxWidgets 3.3 no longer provides the APIs that were deprecated in wxWidgets 3.0. wxPython 4.3 removes them as well. Add-ons that use them need to be updated.
  • gui.nvdaControls.CustomCheckListBox.notifyIAccessible is removed.

Description of development approach:

  • The wxPython pin in pyproject.toml is updated.
  • Every wx name that NVDA's source code uses still exists in wxPython 4.3.1.
  • wxWidgets 3.3.2 gives the check list box its own MSAA implementation. When an item is checked or unchecked, the check list box now sends a state change event itself. NVDA's CustomCheckListBox sent the same event from its check handler, in notifyIAccessible. Every toggle would be reported twice, so notifyIAccessible and its event binding are removed.
  • CustomCheckListBox keeps its own accessible object, ListCtrlAccessible, which takes precedence over the one from wxWidgets. The wxWidgets 3.3.3 implementation reports no child items to MSAA. With it, object navigation cannot reach the list items and the position information (for example "1 of 3") is lost. It also reports every item as focused and no item as selected.
  • The note on the Edge backend in gui.message.HtmlMessageDialog said that wxPython 4.3 would allow reusing one Edge WebView configuration. This is not the case. wxPython 4.3.1 does not expose a way to create an Edge configuration from Python. The note is corrected.

Testing strategy:

  • Ran NVDA from source and tested the check lists in NVDA's settings, such as speech dictionaries, NVDA modifier keys and logging categories. Checking and unchecking an item is reported once. Object navigation reaches the list items. Position information is reported.
  • Built a distribution. It contains the wxWidgets 3.3.3 libraries and the wxWidgets translations. The wxWidgets libraries are about 1 MB larger than before. The wxPython wheel now also ships libcairo-2.dll. The distribution does not include it, because wxWidgets only loads it on demand for its cairo renderer.
  • To test manually:
    • Dialogs with radio buttons, such as the Elements List, configuration profiles and the speech dictionary dialog.
    • Tree views in the Elements List and the Input Gestures dialog.
    • Changing NVDA's language.
    • The width of the settings panels.

Known issues with pull request:

  • The type stubs in wxPython 4.3.1 contain syntax errors. For example, wx/adv.pyi cannot be parsed. These are fixed in the upcoming wxPython release.
  • The accessibility of the wxWidgets 3.3.3 check list box is not usable as is. NVDA keeps its own implementation for now.

Code Review Checklist:

  • Documentation:
    • Change log entry
    • User Documentation
    • Developer / Technical Documentation
    • Context sensitive help for GUI changes
  • Testing:
    • Unit tests
    • System (end to end) tests
    • Manual testing
  • UX of all users considered:
    • Speech
    • Braille
    • Low Vision
    • Different web browsers
    • Localization in other languages / culture than English
  • API is compatible with existing add-ons.
  • Security precautions taken.

Update wxPython from 4.2.4 to 4.3.1, which is based on wxWidgets 3.3.3.

Remove gui.nvdaControls.CustomCheckListBox.notifyIAccessible.

Correct the note on the Edge WebView backend in gui.message.HtmlMessageDialog.

Assisted-by: Claude:claude-opus-5-5
@LeonarddeR
LeonarddeR marked this pull request as ready for review September 23, 2026 15:54
@LeonarddeR
LeonarddeR requested a review from a team as a code owner September 23, 2026 15:54
@LeonarddeR
LeonarddeR requested review from SaschaCowley and a lite review from Copilot and removed request for Copilot September 23, 2026 15:54
Copilot AI lite review requested due to automatic review settings September 23, 2026 15:55

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The pinned wxPython release contains invalid type stubs that can break CI static analysis.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 1 High severity

Open (1)
What changed in this PR

Updates NVDA to wxPython 4.3.1/wxWidgets 3.3.3 and adapts checklist accessibility behavior.

Changes:

  • Updated dependency pins and lockfile.
  • Removed duplicate checklist accessibility notifications.
  • Updated changelog and WebView documentation.
  • Critical issue: wxPython 4.3.1 ships syntactically invalid type stubs that may break CI static analysis.
File Summary
uv.lock Locks wxPython 4.3.1 artifacts.
user_docs/​en/​changes.md Documents dependency and API changes.
source/​gui/​nvdaControls.py Removes duplicate checklist notifications.
source/​gui/​message.py Corrects Edge WebView documentation.
pyproject.toml Pins wxPython 4.3.1.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread pyproject.toml
"cryptography==50.0.0",
"pyserial==3.5",
"wxPython==4.2.4",
"wxPython==4.3.1",

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update to wxPython 4.3 series

2 participants