Issue #1658: dict size is changing during iteration in tkinter.BaseWidget and

tkinter.scrolledtext.ScrolledText.

Reviewed by Amaury Forgeot d'Arc
This commit is contained in:
Guilherme Polo 2008-09-04 11:21:31 +00:00
parent c96cba047b
commit b212b75c22
3 changed files with 10 additions and 10 deletions

View File

@ -1913,11 +1913,9 @@ def __init__(self, master, widgetName, cnf={}, kw={}, extra=()):
cnf = _cnfmerge((cnf, kw)) cnf = _cnfmerge((cnf, kw))
self.widgetName = widgetName self.widgetName = widgetName
BaseWidget._setup(self, master, cnf) BaseWidget._setup(self, master, cnf)
classes = [] classes = [(k, v) for k, v in cnf.items() if isinstance(k, type)]
for k in cnf.keys(): for k, v in classes:
if isinstance(k, type): del cnf[k]
classes.append((k, cnf[k]))
del cnf[k]
self.tk.call( self.tk.call(
(widgetName, self._w) + extra + self._options(cnf)) (widgetName, self._w) + extra + self._options(cnf))
for k, v in classes: for k, v in classes:

View File

@ -19,11 +19,10 @@ def __init__(self, master=None, cnf=None, **kw):
cnf = {} cnf = {}
if kw: if kw:
cnf = _cnfmerge((cnf, kw)) cnf = _cnfmerge((cnf, kw))
fcnf = {} fcnf = {k:v for k,v in cnf.items() if isinstance(k,type) or k=='name'}
for k in cnf.keys(): for k in fcnf.keys():
if isinstance(k, type) or k == 'name': del cnf[k]
fcnf[k] = cnf[k]
del cnf[k]
self.frame = Frame(master, **fcnf) self.frame = Frame(master, **fcnf)
self.vbar = Scrollbar(self.frame, name='vbar') self.vbar = Scrollbar(self.frame, name='vbar')
self.vbar.pack(side=RIGHT, fill=Y) self.vbar.pack(side=RIGHT, fill=Y)

View File

@ -77,6 +77,9 @@ C API
Library Library
------- -------
- Issue #1658: tkinter changes dict size during iteration in both
tkinter.BaseWidget and tkinter.scrolledtext.ScrolledText.
- The bsddb module (and therefore the dbm.bsd module) has been removed. - The bsddb module (and therefore the dbm.bsd module) has been removed.
It is now maintained outside of the standard library at It is now maintained outside of the standard library at
http://www.jcea.es/programacion/pybsddb.htm. http://www.jcea.es/programacion/pybsddb.htm.