diff --git a/Lib/test/test_ttk/test_widgets.py b/Lib/test/test_ttk/test_widgets.py index d5620becfa7187..a731be4c0b7cd9 100644 --- a/Lib/test/test_ttk/test_widgets.py +++ b/Lib/test/test_ttk/test_widgets.py @@ -123,6 +123,11 @@ def test_cb(arg1, **kw): self.widget.state(['active', '!disabled']) self.assertEqual(self.widget.state(), ('active', )) + def test_widget_cget(self): + # Check whether the return value of cget is a string + self.assertEqual(self.widget.cget("state"), tkinter.NORMAL) + self.assertEqual(self.widget.cget("text"), "Text") + class AbstractToplevelTest(AbstractWidgetTest, PixelSizeTests): _rounds_pixels = False diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py index 8ddb7f97e3b233..0fd5d5e24efd6d 100644 --- a/Lib/tkinter/ttk.py +++ b/Lib/tkinter/ttk.py @@ -26,6 +26,7 @@ "tclobjs_to_py", "setup_master"] import tkinter +import _tkinter from tkinter import _flatten, _join, _stringify, _splitdict @@ -572,6 +573,16 @@ def state(self, statespec=None): return self.tk.splitlist(str(self.tk.call(self._w, "state", statespec))) + def cget(self, key): + """Return the resource value for a KEY given as string.""" + return_value = super().cget(key) + if isinstance(return_value, _tkinter.Tcl_Obj): + return str(return_value) + return return_value + + __getitem__ = cget + + class Button(Widget): """Ttk Button widget, displays a textual label and/or image, and evaluates a command when pressed.""" diff --git a/Misc/NEWS.d/next/Library/2024-10-29-03-32-28.gh-issue-126008.wcuSmo.rst b/Misc/NEWS.d/next/Library/2024-10-29-03-32-28.gh-issue-126008.wcuSmo.rst new file mode 100644 index 00000000000000..7d37bded1249f2 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-10-29-03-32-28.gh-issue-126008.wcuSmo.rst @@ -0,0 +1 @@ +Fix an incorrect return value type when getting resource value of ttk widgets.