diff --git a/Doc/library/tkinter.rst b/Doc/library/tkinter.rst index ca034fcdc09b439..4ca952643f18545 100644 --- a/Doc/library/tkinter.rst +++ b/Doc/library/tkinter.rst @@ -3546,6 +3546,13 @@ Widget classes A newly created item is placed at the top of the list; the order can be changed with :meth:`tag_raise` and :meth:`tag_lower`. + .. method:: tk_print() + + Print the contents of the canvas using the native print dialog. + Requires Tk 8.7/9.0 or newer. + + .. versionadded:: next + .. method:: create_arc(*args, **kw) create_bitmap(*args, **kw) create_image(*args, **kw) @@ -5357,6 +5364,13 @@ Widget classes to its base; several modifiers may be combined and are applied from left to right, for example ``'insert wordstart - 1 c'``. + .. method:: tk_print() + + Print the contents of the text widget using the native print dialog. + Requires Tk 8.7/9.0 or newer. + + .. versionadded:: next + .. method:: insert(index, chars, *args) Insert the string *chars* just before the character at *index* (if diff --git a/Doc/whatsnew/3.16.rst b/Doc/whatsnew/3.16.rst index e8c75d2f571061a..c3320f0c2f95c2b 100644 --- a/Doc/whatsnew/3.16.rst +++ b/Doc/whatsnew/3.16.rst @@ -358,6 +358,11 @@ tkinter report the user idle time. (Contributed by Serhiy Storchaka in :gh:`151881`.) +* Added the :meth:`!tk_print` method to :class:`tkinter.Canvas` and + :class:`tkinter.Text` which prints the contents of the widget using the + native print dialog. It requires Tk 8.7/9.0 or newer. + (Contributed by Serhiy Storchaka in :gh:`153256`.) + * Added new window-management methods :meth:`~tkinter.Misc.winfo_isdark` (dark mode detection), :meth:`~tkinter.Wm.wm_iconbadge` (application icon badge) and :meth:`~tkinter.Wm.wm_stackorder` (toplevel stacking order). diff --git a/Lib/test/test_tkinter/test_misc.py b/Lib/test/test_tkinter/test_misc.py index 5f75b8d245b3e99..68734bf7facbc03 100644 --- a/Lib/test/test_tkinter/test_misc.py +++ b/Lib/test/test_tkinter/test_misc.py @@ -599,6 +599,15 @@ def test_tk_inactive(self): # Resetting the timer returns None and does not raise. self.assertIsNone(self.root.tk_inactive(reset=True)) + def test_tk_print(self): + # tk print supports only canvas and text widgets, so tk_print is a + # method of Canvas and Text only. Calling it opens the print + # dialog, so the behavior itself cannot be tested here. + self.assertHasAttr(tkinter.Canvas, 'tk_print') + self.assertHasAttr(tkinter.Text, 'tk_print') + self.assertNotHasAttr(tkinter.Frame, 'tk_print') + self.assertNotHasAttr(tkinter.Misc, 'tk_print') + def test_wait_variable(self): var = tkinter.StringVar(self.root) self.assertEqual(self.root.waitvar, self.root.wait_variable) diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index 83d11a7695ffbe3..c5690c6daade4d0 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -3127,6 +3127,12 @@ def __init__(self, master=None, cnf={}, **kw): yscrollcommand, yscrollincrement.""" Widget.__init__(self, master, 'canvas', cnf, kw) + def tk_print(self): + """Print the contents of the canvas using the native print dialog. + + Requires Tk 8.7/9.0 or newer.""" + self.tk.call('tk', 'print', self._w) + def addtag(self, *args): """Internal function.""" self.tk.call((self._w, 'addtag') + args) @@ -4068,6 +4074,12 @@ def __init__(self, master=None, cnf={}, **kw): """ Widget.__init__(self, master, 'text', cnf, kw) + def tk_print(self): + """Print the contents of the text widget using the native print dialog. + + Requires Tk 8.7/9.0 or newer.""" + self.tk.call('tk', 'print', self._w) + def bbox(self, index): # overrides Misc.bbox """Return a tuple of (x,y,width,height) which gives the bounding box of the visible part of the character at the given index.""" diff --git a/Misc/NEWS.d/next/Library/2026-07-06-14-18-33.gh-issue-153256.tkPrnt.rst b/Misc/NEWS.d/next/Library/2026-07-06-14-18-33.gh-issue-153256.tkPrnt.rst new file mode 100644 index 000000000000000..db61bdb7f7b97d9 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-07-06-14-18-33.gh-issue-153256.tkPrnt.rst @@ -0,0 +1,3 @@ +Added the :meth:`!tk_print` method to :class:`tkinter.Canvas` and +:class:`tkinter.Text` which prints the contents of the widget using the +native print dialog. It requires Tk 8.7/9.0 or newer.