Returns a tuple of all known themes.
+ .. method:: theme_styles(themename=None)
+
+ Returns a tuple of all styles in *themename*.
+ If *themename* is not given, the current theme is used.
+
+ .. versionadded:: next
+
+ Availability: Tk 9.0.
+
+
.. method:: theme_use(themename=None)
If *themename* is not given, returns the theme in use. Otherwise, sets
synchronization of the displayed view with the underlying text.
(Contributed by Serhiy Storchaka in :gh:`151675`.)
+* Added the :meth:`ttk.Style.theme_styles
+ <tkinter.ttk.Style.theme_styles>` method which returns the list of styles
+ defined in a theme.
+ (Contributed by Serhiy Storchaka in :gh:`151920`.)
+
* Added new :class:`!tkinter.Canvas` methods :meth:`~tkinter.Canvas.rchars`
which replaces the text or coordinates of canvas items, and
:meth:`~tkinter.Canvas.rotate` which rotates the coordinates of canvas items.
dithered image when its data was supplied in pieces.
(Contributed by Serhiy Storchaka in :gh:`151888`.)
-
xml
---
from test import support
from test.support import requires
from test.test_tkinter.support import setUpModule # noqa: F401
-from test.test_tkinter.support import AbstractTkTest, get_tk_patchlevel
+from test.test_tkinter.support import (AbstractTkTest, get_tk_patchlevel,
+ requires_tk)
requires('gui')
self.style.theme_use(curr_theme)
+ @requires_tk(9, 0)
+ def test_theme_styles(self):
+ # The 'default' theme is always available and defines the base styles.
+ default_styles = self.style.theme_styles('default')
+ self.assertIsInstance(default_styles, tuple)
+ self.assertIn('.', default_styles)
+ self.assertIn('TButton', default_styles)
+
+ # Without an argument the current theme is used.
+ styles = self.style.theme_styles()
+ self.assertIsInstance(styles, tuple)
+ self.assertIn('.', styles)
+
+ for theme in self.style.theme_names():
+ self.assertIsInstance(self.style.theme_styles(theme), tuple)
+
+ self.assertRaises(tkinter.TclError,
+ self.style.theme_styles, 'nonexistingname')
+
def test_theme_settings(self):
style = self.style
theme = style.theme_use()
return self.tk.splitlist(self.tk.call(self._name, "theme", "names"))
+ def theme_styles(self, themename=None):
+ """Returns a list of all styles in themename.
+
+ If themename is omitted, the current theme is used.
+
+ Availability: Tk 9.0.
+ """
+ if themename is None:
+ return self.tk.splitlist(
+ self.tk.call(self._name, "theme", "styles"))
+ return self.tk.splitlist(
+ self.tk.call(self._name, "theme", "styles", themename))
+
+
def theme_use(self, themename=None):
"""If themename is None, returns the theme in use, otherwise, set
the current theme to themename, refreshes all widgets and emits
--- /dev/null
+Add the :meth:`ttk.Style.theme_styles <tkinter.ttk.Style.theme_styles>`
+method, wrapping the Tk ``ttk::style theme styles`` subcommand, which
+returns the list of styles defined in a theme.