[Python-checkins] bpo-25684: ttk.OptionMenu radiobuttons weren't unique (GH-2276) (GH-2960)

Mariatta webhook-mailer at python.org
Sun Sep 10 02:02:17 EDT 2017


https://github.com/python/cpython/commit/e1847ea4a9bdc7549893091a63e14f2afbdecc32
commit: e1847ea4a9bdc7549893091a63e14f2afbdecc32
branch: 2.7
author: Cheryl Sabella <cheryl.sabella at gmail.com>
committer: Mariatta <Mariatta at users.noreply.github.com>
date: 2017年09月09日T23:02:14-07:00
summary:
bpo-25684: ttk.OptionMenu radiobuttons weren't unique (GH-2276) (GH-2960)
ttk.OptionMenu radiobuttons weren't unique 
between instances of OptionMenu.
(cherry picked from commit a568e5273382a5dca0c27274f7d8e34c41a87d4d)
files:
A Misc/NEWS.d/next/Library/2017-07-17-11-35-00.bpo-25684.usELVx.rst
M Lib/lib-tk/test/test_ttk/test_extensions.py
M Lib/lib-tk/ttk.py
M Misc/ACKS
diff --git a/Lib/lib-tk/test/test_ttk/test_extensions.py b/Lib/lib-tk/test/test_ttk/test_extensions.py
index 57ffdddb7d8..70b2f9c6b12 100644
--- a/Lib/lib-tk/test/test_ttk/test_extensions.py
+++ b/Lib/lib-tk/test/test_ttk/test_extensions.py
@@ -284,6 +284,31 @@ def cb_test(item):
 
 optmenu.destroy()
 
+ def test_unique_radiobuttons(self):
+ # check that radiobuttons are unique across instances (bpo25684)
+ items = ('a', 'b', 'c')
+ default = 'a'
+ optmenu = ttk.OptionMenu(self.root, self.textvar, default, *items)
+ textvar2 = tkinter.StringVar(self.root)
+ optmenu2 = ttk.OptionMenu(self.root, textvar2, default, *items)
+ optmenu.pack()
+ optmenu.wait_visibility()
+ optmenu2.pack()
+ optmenu2.wait_visibility()
+ optmenu['menu'].invoke(1)
+ optmenu2['menu'].invoke(2)
+ optmenu_stringvar_name = optmenu['menu'].entrycget(0, 'variable')
+ optmenu2_stringvar_name = optmenu2['menu'].entrycget(0, 'variable')
+ self.assertNotEqual(optmenu_stringvar_name,
+ optmenu2_stringvar_name)
+ self.assertEqual(self.root.tk.globalgetvar(optmenu_stringvar_name),
+ items[1])
+ self.assertEqual(self.root.tk.globalgetvar(optmenu2_stringvar_name),
+ items[2])
+
+ optmenu.destroy()
+ optmenu2.destroy()
+
 
 tests_gui = (LabeledScaleTest, OptionMenuTest)
 
diff --git a/Lib/lib-tk/ttk.py b/Lib/lib-tk/ttk.py
index 77c93b12ae7..6da1eb189f1 100644
--- a/Lib/lib-tk/ttk.py
+++ b/Lib/lib-tk/ttk.py
@@ -1614,7 +1614,8 @@ def set_menu(self, default=None, *values):
 menu.delete(0, 'end')
 for val in values:
 menu.add_radiobutton(label=val,
- command=Tkinter._setit(self._variable, val, self._callback))
+ command=Tkinter._setit(self._variable, val, self._callback),
+ variable=self._variable)
 
 if default:
 self._variable.set(default)
diff --git a/Misc/ACKS b/Misc/ACKS
index 229a874ffc2..688cd470d20 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1229,6 +1229,7 @@ James Rutherford
 Chris Ryland
 Constantina S.
 Matthieu S
+Cheryl Sabella
 Patrick Sabin
 Sébastien Sablé
 Suman Saha
diff --git a/Misc/NEWS.d/next/Library/2017-07-17-11-35-00.bpo-25684.usELVx.rst b/Misc/NEWS.d/next/Library/2017-07-17-11-35-00.bpo-25684.usELVx.rst
new file mode 100644
index 00000000000..61d6b29cafc
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-07-17-11-35-00.bpo-25684.usELVx.rst
@@ -0,0 +1,2 @@
+Change ``ttk.OptionMenu`` radiobuttons to be unique across instances of
+``OptionMenu``.


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /