From e69ca588ac6a063bd0b96817f1b6b3593b34a625 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 10 Sep 2021 16:59:12 +0300 Subject: [PATCH] Stubs for ttkthemes (#6024) --- pyrightconfig.stricter.json | 1 + stdlib/tkinter/__init__.pyi | 1 + stdlib/tkinter/ttk.pyi | 9 ++++--- stubs/ttkthemes/METADATA.toml | 1 + stubs/ttkthemes/ttkthemes/__init__.pyi | 7 +++++ stubs/ttkthemes/ttkthemes/_imgops.pyi | 2 ++ stubs/ttkthemes/ttkthemes/_utils.pyi | 7 +++++ stubs/ttkthemes/ttkthemes/_widget.pyi | 26 +++++++++++++++++++ stubs/ttkthemes/ttkthemes/themed_style.pyi | 12 +++++++++ stubs/ttkthemes/ttkthemes/themed_tk.pyi | 30 ++++++++++++++++++++++ 10 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 stubs/ttkthemes/METADATA.toml create mode 100644 stubs/ttkthemes/ttkthemes/__init__.pyi create mode 100644 stubs/ttkthemes/ttkthemes/_imgops.pyi create mode 100644 stubs/ttkthemes/ttkthemes/_utils.pyi create mode 100644 stubs/ttkthemes/ttkthemes/_widget.pyi create mode 100644 stubs/ttkthemes/ttkthemes/themed_style.pyi create mode 100644 stubs/ttkthemes/ttkthemes/themed_tk.pyi diff --git a/pyrightconfig.stricter.json b/pyrightconfig.stricter.json index 2a67d9644..d1f9db4f7 100644 --- a/pyrightconfig.stricter.json +++ b/pyrightconfig.stricter.json @@ -59,6 +59,7 @@ "stubs/simplejson", "stubs/slumber", "stubs/stripe", + "stubs/ttkthemes", "stubs/vobject", "stubs/waitress", "stubs/Werkzeug" diff --git a/stdlib/tkinter/__init__.pyi b/stdlib/tkinter/__init__.pyi index 2161e41b9..d58ed0717 100644 --- a/stdlib/tkinter/__init__.pyi +++ b/stdlib/tkinter/__init__.pyi @@ -578,6 +578,7 @@ class _ExceptionReportingCallback(Protocol): class Tk(Misc, Wm): master: None def __init__( + # please update ttkthemes stub if you change this self, screenName: str | None = ..., baseName: str | None = ..., diff --git a/stdlib/tkinter/ttk.pyi b/stdlib/tkinter/ttk.pyi index c2bde4c6a..dced3b5f4 100644 --- a/stdlib/tkinter/ttk.pyi +++ b/stdlib/tkinter/ttk.pyi @@ -14,7 +14,7 @@ _TtkCompound = Literal["text", "image", tkinter._Compound] class Style: master: Any tk: _tkinter.TkappType - def __init__(self, master: Any | None = ...): ... + def __init__(self, master: tkinter.Misc | None = ...): ... def configure(self, style, query_opt: Any | None = ..., **kw): ... def map(self, style, query_opt: Any | None = ..., **kw): ... def lookup(self, style, option, state: Any | None = ..., default: Any | None = ...): ... @@ -24,8 +24,11 @@ class Style: def element_options(self, elementname): ... def theme_create(self, themename, parent: Any | None = ..., settings: Any | None = ...): ... def theme_settings(self, themename, settings): ... - def theme_names(self): ... - def theme_use(self, themename: Any | None = ...): ... + def theme_names(self) -> Tuple[str, ...]: ... + @overload + def theme_use(self, themename: str) -> None: ... + @overload + def theme_use(self, themename: None = ...) -> str: ... class Widget(tkinter.Widget): def __init__(self, master: tkinter.Misc | None, widgetname, kw: Any | None = ...): ... diff --git a/stubs/ttkthemes/METADATA.toml b/stubs/ttkthemes/METADATA.toml new file mode 100644 index 000000000..ffc5a1c5e --- /dev/null +++ b/stubs/ttkthemes/METADATA.toml @@ -0,0 +1 @@ +version = "3.2" diff --git a/stubs/ttkthemes/ttkthemes/__init__.pyi b/stubs/ttkthemes/ttkthemes/__init__.pyi new file mode 100644 index 000000000..df541b9fb --- /dev/null +++ b/stubs/ttkthemes/ttkthemes/__init__.pyi @@ -0,0 +1,7 @@ +from collections.abc import Sequence + +from ttkthemes.themed_style import ThemedStyle as ThemedStyle +from ttkthemes.themed_tk import ThemedTk as ThemedTk + +# actually a list, but shouldn't be modified +THEMES: Sequence[str] diff --git a/stubs/ttkthemes/ttkthemes/_imgops.pyi b/stubs/ttkthemes/ttkthemes/_imgops.pyi new file mode 100644 index 000000000..1c0b15f1e --- /dev/null +++ b/stubs/ttkthemes/ttkthemes/_imgops.pyi @@ -0,0 +1,2 @@ +def shift_hue(image, hue): ... +def make_transparent(image): ... diff --git a/stubs/ttkthemes/ttkthemes/_utils.pyi b/stubs/ttkthemes/ttkthemes/_utils.pyi new file mode 100644 index 000000000..5231ac87b --- /dev/null +++ b/stubs/ttkthemes/ttkthemes/_utils.pyi @@ -0,0 +1,7 @@ +from typing import Any + +def temporary_chdir(new_dir) -> None: ... +def get_file_directory(): ... +def get_temp_directory(): ... +def get_themes_directory(theme_name: Any | None = ..., png: bool = ...): ... +def create_directory(directory): ... diff --git a/stubs/ttkthemes/ttkthemes/_widget.pyi b/stubs/ttkthemes/ttkthemes/_widget.pyi new file mode 100644 index 000000000..96900d6cf --- /dev/null +++ b/stubs/ttkthemes/ttkthemes/_widget.pyi @@ -0,0 +1,26 @@ +import _tkinter +from _typeshed import StrPath +from typing import ClassVar + +class ThemedWidget: + pixmap_themes: ClassVar[list[str]] + PACKAGES: ClassVar[dict[str, str]] + tk: _tkinter.TkappType + png_support: bool + def __init__(self, tk_interpreter, gif_override: bool = ...) -> None: ... + def set_theme(self, theme_name: str) -> None: ... + def get_themes(self) -> list[str]: ... + @property + def themes(self) -> list[str]: ... + @property + def current_theme(self) -> str: ... + def set_theme_advanced( + self, + theme_name: str, + brightness: float = ..., + saturation: float = ..., + hue: float = ..., + preserve_transparency: bool = ..., + output_dir: StrPath | None = ..., + advanced_name: str = ..., + ) -> None: ... diff --git a/stubs/ttkthemes/ttkthemes/themed_style.pyi b/stubs/ttkthemes/ttkthemes/themed_style.pyi new file mode 100644 index 000000000..7946921ee --- /dev/null +++ b/stubs/ttkthemes/ttkthemes/themed_style.pyi @@ -0,0 +1,12 @@ +import tkinter +from tkinter import ttk + +from ._widget import ThemedWidget + +class ThemedStyle(ttk.Style, ThemedWidget): + def __init__( + self, master: tkinter.Misc | None, *, theme: str | None = ..., gif_override: bool | None = ..., **kwargs + ) -> None: ... + # theme_use() can't return None (differs from ttk.Style) + def theme_use(self, theme_name: str | None = ...) -> str: ... # type: ignore + def theme_names(self) -> list[str]: ... # type: ignore diff --git a/stubs/ttkthemes/ttkthemes/themed_tk.pyi b/stubs/ttkthemes/ttkthemes/themed_tk.pyi new file mode 100644 index 000000000..3a2c9d748 --- /dev/null +++ b/stubs/ttkthemes/ttkthemes/themed_tk.pyi @@ -0,0 +1,30 @@ +import tkinter +from typing import Any + +from ._widget import ThemedWidget + +class ThemedTk(tkinter.Tk, ThemedWidget): + def __init__( + self, + # non-keyword-only args copied from tkinter.Tk + screenName: str | None = ..., + baseName: str | None = ..., + className: str = ..., + useTk: bool = ..., + sync: bool = ..., + use: str | None = ..., + *, + theme: str | None = ..., + # fonts argument does nothing + toplevel: bool | None = ..., + themebg: bool | None = ..., + background: bool | None = ..., # old alias for themebg + gif_override: bool = ..., + ) -> None: ... + def set_theme(self, theme_name, toplevel: bool | None = ..., themebg: bool | None = ...) -> None: ... + # TODO: currently no good way to say "use the same big list of kwargs as parent class but also add these" + def config(self, kw: Any | None = ..., **kwargs): ... # type: ignore + def cget(self, k): ... + def configure(self, kw: Any | None = ..., **kwargs): ... # type: ignore + def __getitem__(self, k): ... + def __setitem__(self, k, v): ...