https://github.com/python/cpython/commit/f67c51fb6077f759b048727cf367fdb2c88d3a19
commit: f67c51fb6077f759b048727cf367fdb2c88d3a19
branch: main
author: Serhiy Storchaka <[email protected]>
committer: terryjreedy <[email protected]>
date: 2026-09-22T15:20:25-04:00
summary:

gh-75487: Do not save a truncated number when an int entry is blanked in IDLE 
Settings (#157680)

The value is recorded on every keystroke, so blanking "80" with the
Backspace key left "8" to be saved.  Blanking an entry now forgets the
recorded value, so that the saved value is kept.

files:
A Misc/NEWS.d/next/IDLE/2026-09-17-17-00-00.gh-issue-75487.blankint.rst
M Lib/idlelib/configdialog.py
M Lib/idlelib/idle_test/test_configdialog.py

diff --git a/Lib/idlelib/configdialog.py b/Lib/idlelib/configdialog.py
index a5d1aaeb5a946f..02133ce022d79e 100644
--- a/Lib/idlelib/configdialog.py
+++ b/Lib/idlelib/configdialog.py
@@ -2285,10 +2285,13 @@ def make_callback(var, config):
         def default_callback(*params):
             "Add config values to changes instance."
             value = var.get()
-            # A blanked int entry is an empty string; do not save it as an
-            # invalid config value (gh-83653).
             if value != '':
                 changes.add_option(*config, value)
+            else:
+                # A blanked int entry: do not save an invalid value, and
+                # forget the value recorded while editing (gh-75487).
+                config_type, section, item = config
+                changes[config_type].get(section, {}).pop(item, None)
         return default_callback
 
     def attach(self):
diff --git a/Lib/idlelib/idle_test/test_configdialog.py 
b/Lib/idlelib/idle_test/test_configdialog.py
index 367c63dc01126a..5e209287a52d97 100644
--- a/Lib/idlelib/idle_test/test_configdialog.py
+++ b/Lib/idlelib/idle_test/test_configdialog.py
@@ -1711,6 +1711,10 @@ def test_make_callback(self):
         sv.set('5')
         cb()
         self.assertEqual(changes['main']['section']['option'], '5')
+        # gh-75487: blanking the entry forgets the value recorded before.
+        sv.set('')
+        cb()
+        self.assertNotIn('option', changes['main']['section'])
         changes.clear()
 
     def test_attach_detach(self):
diff --git 
a/Misc/NEWS.d/next/IDLE/2026-09-17-17-00-00.gh-issue-75487.blankint.rst 
b/Misc/NEWS.d/next/IDLE/2026-09-17-17-00-00.gh-issue-75487.blankint.rst
new file mode 100644
index 00000000000000..5ae2d360f5c6a9
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2026-09-17-17-00-00.gh-issue-75487.blankint.rst
@@ -0,0 +1,2 @@
+Fix saving a truncated number when an integer entry in the IDLE Settings
+dialog is blanked with the Backspace key.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to