From 2bd93fdeddb229d73fda9297c3585a79849a09aa Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Fri, 3 Jan 2020 18:03:45 -0500 Subject: [PATCH 1/3] bpo-39152: add missing ttk.Scale.configure return value tkinter.ttk.Scale().configure() now returns a configuration. Change posted by Giovanni Lombardo. --- Lib/tkinter/ttk.py | 3 ++- .../next/Library/2020-01-03-18-02-50.bpo-39152.JgPjCC.rst | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2020-01-03-18-02-50.bpo-39152.JgPjCC.rst diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py index 573544dd84a3902..9b1f4ad7615c4e1 100644 --- a/Lib/tkinter/ttk.py +++ b/Lib/tkinter/ttk.py @@ -1086,9 +1086,10 @@ def configure(self, cnf=None, **kw): generates a <> event.""" if cnf: kw.update(cnf) - Widget.configure(self, **kw) + retval = Widget.configure(self, **kw) if any(['from' in kw, 'from_' in kw, 'to' in kw]): self.event_generate('<>') + return retval def get(self, x=None, y=None): diff --git a/Misc/NEWS.d/next/Library/2020-01-03-18-02-50.bpo-39152.JgPjCC.rst b/Misc/NEWS.d/next/Library/2020-01-03-18-02-50.bpo-39152.JgPjCC.rst new file mode 100644 index 000000000000000..190a5149aa77dbf --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-01-03-18-02-50.bpo-39152.JgPjCC.rst @@ -0,0 +1,2 @@ +Add missing ttk.Scale.configure return value. ttk.Scale().configure() now +returns a configuration. Change posted by Giovanni Lombardo. From 78ea172ade899563bf7eb3ff8afead908efcdd4d Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sat, 4 Jan 2020 16:29:22 -0500 Subject: [PATCH 2/3] Remove skip of test that now works. --- Lib/tkinter/test/widget_tests.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Lib/tkinter/test/widget_tests.py b/Lib/tkinter/test/widget_tests.py index 75a068fbbf26b6a..29629715f8940c3 100644 --- a/Lib/tkinter/test/widget_tests.py +++ b/Lib/tkinter/test/widget_tests.py @@ -210,8 +210,7 @@ def test_keys(self): widget = self.create() keys = widget.keys() # XXX - if not isinstance(widget, Scale): - self.assertEqual(sorted(keys), sorted(widget.configure())) + self.assertEqual(sorted(keys), sorted(widget.configure())) for k in keys: widget[k] # Test if OPTIONS contains all keys From 77de5b7f5ab1f093edfe9c01dc77a809deef5730 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sat, 4 Jan 2020 18:22:48 -0500 Subject: [PATCH 3/3] Call original configure with original arguments. Don't update dict with None or string. Remove skip of param test that now works. update blurb. --- Lib/tkinter/test/widget_tests.py | 10 +++------- Lib/tkinter/ttk.py | 4 ++-- .../Library/2020-01-03-18-02-50.bpo-39152.JgPjCC.rst | 4 ++-- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/Lib/tkinter/test/widget_tests.py b/Lib/tkinter/test/widget_tests.py index 29629715f8940c3..b42ff52178f29e7 100644 --- a/Lib/tkinter/test/widget_tests.py +++ b/Lib/tkinter/test/widget_tests.py @@ -3,7 +3,6 @@ import unittest import sys import tkinter -from tkinter.ttk import Scale from tkinter.test.support import (AbstractTkTest, tcl_version, requires_tcl, get_tk_patchlevel, pixels_conv, tcl_obj_eq) import test.support @@ -63,11 +62,9 @@ def checkParam(self, widget, name, value, *, expected=_sentinel, eq = tcl_obj_eq self.assertEqual2(widget[name], expected, eq=eq) self.assertEqual2(widget.cget(name), expected, eq=eq) - # XXX - if not isinstance(widget, Scale): - t = widget.configure(name) - self.assertEqual(len(t), 5) - self.assertEqual2(t[4], expected, eq=eq) + t = widget.configure(name) + self.assertEqual(len(t), 5) + self.assertEqual2(t[4], expected, eq=eq) def checkInvalidParam(self, widget, name, value, errmsg=None, *, keep_orig=True): @@ -209,7 +206,6 @@ def assertIsBoundingBox(self, bbox): def test_keys(self): widget = self.create() keys = widget.keys() - # XXX self.assertEqual(sorted(keys), sorted(widget.configure())) for k in keys: widget[k] diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py index 9b1f4ad7615c4e1..c7c71cd5a559cf6 100644 --- a/Lib/tkinter/ttk.py +++ b/Lib/tkinter/ttk.py @@ -1084,9 +1084,9 @@ def configure(self, cnf=None, **kw): Setting a value for any of the "from", "from_" or "to" options generates a <> event.""" - if cnf: + retval = Widget.configure(self, cnf, **kw) + if not isinstance(cnf, (type(None), str)): kw.update(cnf) - retval = Widget.configure(self, **kw) if any(['from' in kw, 'from_' in kw, 'to' in kw]): self.event_generate('<>') return retval diff --git a/Misc/NEWS.d/next/Library/2020-01-03-18-02-50.bpo-39152.JgPjCC.rst b/Misc/NEWS.d/next/Library/2020-01-03-18-02-50.bpo-39152.JgPjCC.rst index 190a5149aa77dbf..abb3df0da0fe46b 100644 --- a/Misc/NEWS.d/next/Library/2020-01-03-18-02-50.bpo-39152.JgPjCC.rst +++ b/Misc/NEWS.d/next/Library/2020-01-03-18-02-50.bpo-39152.JgPjCC.rst @@ -1,2 +1,2 @@ -Add missing ttk.Scale.configure return value. ttk.Scale().configure() now -returns a configuration. Change posted by Giovanni Lombardo. +Fix ttk.Scale.configure([name]) to return configuration tuple for name +or all options. Giovanni Lombardo contributed part of the patch.