Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b212b75

Browse files
committed
Issue #1658: dict size is changing during iteration in tkinter.BaseWidget and
tkinter.scrolledtext.ScrolledText. Reviewed by Amaury Forgeot d'Arc
1 parent c96cba0 commit b212b75

3 files changed

Lines changed: 10 additions & 10 deletions

File tree

Lib/tkinter/__init__.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1913,11 +1913,9 @@ def __init__(self, master, widgetName, cnf={}, kw={}, extra=()):
19131913
cnf = _cnfmerge((cnf, kw))
19141914
self.widgetName = widgetName
19151915
BaseWidget._setup(self, master, cnf)
1916-
classes = []
1917-
for k in cnf.keys():
1918-
if isinstance(k, type):
1919-
classes.append((k, cnf[k]))
1920-
del cnf[k]
1916+
classes = [(k, v) for k, v in cnf.items() if isinstance(k, type)]
1917+
for k, v in classes:
1918+
del cnf[k]
19211919
self.tk.call(
19221920
(widgetName, self._w) + extra + self._options(cnf))
19231921
for k, v in classes:

Lib/tkinter/scrolledtext.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@ def __init__(self, master=None, cnf=None, **kw):
1919
cnf = {}
2020
if kw:
2121
cnf = _cnfmerge((cnf, kw))
22-
fcnf = {}
23-
for k in cnf.keys():
24-
if isinstance(k, type) or k == 'name':
25-
fcnf[k] = cnf[k]
26-
del cnf[k]
22+
fcnf = {k:v for k,v in cnf.items() if isinstance(k,type) or k=='name'}
23+
for k in fcnf.keys():
24+
del cnf[k]
25+
2726
self.frame = Frame(master, **fcnf)
2827
self.vbar = Scrollbar(self.frame, name='vbar')
2928
self.vbar.pack(side=RIGHT, fill=Y)

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ C API
7777
Library
7878
-------
7979

80+
- Issue #1658: tkinter changes dict size during iteration in both
81+
tkinter.BaseWidget and tkinter.scrolledtext.ScrolledText.
82+
8083
- The bsddb module (and therefore the dbm.bsd module) has been removed.
8184
It is now maintained outside of the standard library at
8285
http://www.jcea.es/programacion/pybsddb.htm.

0 commit comments

Comments
 (0)