annotate Lib/idlelib/dynOptionMenuWidget.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents ef4cca2d6171
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20685
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
1 """
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
2 OptionMenu widget modified to allow dynamic menu reconfiguration
20859
15c924a11aec added ability to set hilightthickness
Steven M. Gava <elguavas@python.net>
parents: 20735
diff changeset
3 and setting of highlightthickness
20685
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
4 """
47130
ef4cca2d6171 Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents: 42725
diff changeset
5 from tkinter import OptionMenu
ef4cca2d6171 Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents: 42725
diff changeset
6 from tkinter import _setit
20859
15c924a11aec added ability to set hilightthickness
Steven M. Gava <elguavas@python.net>
parents: 20735
diff changeset
7 import copy
20685
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
8
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
9 class DynOptionMenu(OptionMenu):
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
10 """
20859
15c924a11aec added ability to set hilightthickness
Steven M. Gava <elguavas@python.net>
parents: 20735
diff changeset
11 unlike OptionMenu, our kwargs can include highlightthickness
20685
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
12 """
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
13 def __init__(self, master, variable, value, *values, **kwargs):
20859
15c924a11aec added ability to set hilightthickness
Steven M. Gava <elguavas@python.net>
parents: 20735
diff changeset
14 #get a copy of kwargs before OptionMenu.__init__ munges them
15c924a11aec added ability to set hilightthickness
Steven M. Gava <elguavas@python.net>
parents: 20735
diff changeset
15 kwargsCopy=copy.copy(kwargs)
42725
fa9a40ef0780 Conform to py3k dict.{keys, items, values} with some advice from 2b3
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
16 if 'highlightthickness' in list(kwargs.keys()):
20859
15c924a11aec added ability to set hilightthickness
Steven M. Gava <elguavas@python.net>
parents: 20735
diff changeset
17 del(kwargs['highlightthickness'])
20685
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
18 OptionMenu.__init__(self, master, variable, value, *values, **kwargs)
20859
15c924a11aec added ability to set hilightthickness
Steven M. Gava <elguavas@python.net>
parents: 20735
diff changeset
19 self.config(highlightthickness=kwargsCopy.get('highlightthickness'))
20685
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
20 #self.menu=self['menu']
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
21 self.variable=variable
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
22 self.command=kwargs.get('command')
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 21762
diff changeset
23
20735
faa2726dea37 more of config dialog reading from files
Steven M. Gava <elguavas@python.net>
parents: 20685
diff changeset
24 def SetMenu(self,valueList,value=None):
20685
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
25 """
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
26 clear and reload the menu with a new set of options.
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
27 valueList - list of new options
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 21762
diff changeset
28 value - initial value to set the optionmenu's menubutton to
20685
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
29 """
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
30 self['menu'].delete(0,'end')
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
31 for item in valueList:
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
32 self['menu'].add_command(label=item,
99ad2a9d20e1 dynamic option menu widget.
Steven M. Gava <elguavas@python.net>
parents:
diff changeset
33 command=_setit(self.variable,item,self.command))
20735
faa2726dea37 more of config dialog reading from files
Steven M. Gava <elguavas@python.net>
parents: 20685
diff changeset
34 if value:
faa2726dea37 more of config dialog reading from files
Steven M. Gava <elguavas@python.net>
parents: 20685
diff changeset
35 self.variable.set(value)