diff --git a/pyrightconfig.stricter.json b/pyrightconfig.stricter.json index 54d64e5f1529..09a94a963a2c 100644 --- a/pyrightconfig.stricter.json +++ b/pyrightconfig.stricter.json @@ -91,7 +91,6 @@ "stubs/shapely", "stubs/tensorflow", "stubs/tqdm", - "stubs/ttkthemes", "stubs/vobject", "stubs/workalendar", "stubs/wurlitzer", diff --git a/stdlib/tkinter/__init__.pyi b/stdlib/tkinter/__init__.pyi index 291e2fc5108f..dcac61d77e0a 100644 --- a/stdlib/tkinter/__init__.pyi +++ b/stdlib/tkinter/__init__.pyi @@ -977,6 +977,7 @@ class Tk(Misc, Wm): sync: bool = False, use: str | None = None, ) -> None: ... + # Keep this in sync with ttktheme.ThemedTk. See issue #13858 @overload def configure( self, diff --git a/stubs/ttkthemes/ttkthemes/_imgops.pyi b/stubs/ttkthemes/ttkthemes/_imgops.pyi index 1c0b15f1ee7e..3322a352372a 100644 --- a/stubs/ttkthemes/ttkthemes/_imgops.pyi +++ b/stubs/ttkthemes/ttkthemes/_imgops.pyi @@ -1,2 +1,7 @@ -def shift_hue(image, hue): ... -def make_transparent(image): ... +from typing import Any +from typing_extensions import TypeAlias + +_Image: TypeAlias = Any # actually PIL.Image, but not worth adding a dependency + +def shift_hue(image: _Image, hue: float) -> _Image: ... +def make_transparent(image: _Image) -> _Image: ... diff --git a/stubs/ttkthemes/ttkthemes/_utils.pyi b/stubs/ttkthemes/ttkthemes/_utils.pyi index 20fc39fae22e..0c05434a63d1 100644 --- a/stubs/ttkthemes/ttkthemes/_utils.pyi +++ b/stubs/ttkthemes/ttkthemes/_utils.pyi @@ -1,7 +1,8 @@ -from _typeshed import Incomplete +from _typeshed import FileDescriptorOrPath, StrOrBytesPath +from contextlib import AbstractContextManager -def temporary_chdir(new_dir) -> None: ... -def get_file_directory(): ... -def get_temp_directory(): ... -def get_themes_directory(theme_name: Incomplete | None = None, png: bool = False): ... -def create_directory(directory): ... +def temporary_chdir(new_dir: FileDescriptorOrPath) -> AbstractContextManager[None]: ... +def get_file_directory() -> str: ... +def get_temp_directory() -> str: ... +def get_themes_directory(theme_name: str | None = None, png: bool = False) -> str: ... +def create_directory(directory: StrOrBytesPath) -> StrOrBytesPath: ... diff --git a/stubs/ttkthemes/ttkthemes/_widget.pyi b/stubs/ttkthemes/ttkthemes/_widget.pyi index 891e7b747aeb..d5bf4d3ee151 100644 --- a/stubs/ttkthemes/ttkthemes/_widget.pyi +++ b/stubs/ttkthemes/ttkthemes/_widget.pyi @@ -7,7 +7,7 @@ class ThemedWidget: PACKAGES: ClassVar[dict[str, str]] tk: _tkinter.TkappType png_support: bool - def __init__(self, tk_interpreter, gif_override: bool = False) -> None: ... + def __init__(self, tk_interpreter: _tkinter.TkappType, gif_override: bool = False) -> None: ... def set_theme(self, theme_name: str) -> None: ... def get_themes(self) -> list[str]: ... @property diff --git a/stubs/ttkthemes/ttkthemes/themed_style.pyi b/stubs/ttkthemes/ttkthemes/themed_style.pyi index e880f0718dc2..5821b620b155 100644 --- a/stubs/ttkthemes/ttkthemes/themed_style.pyi +++ b/stubs/ttkthemes/ttkthemes/themed_style.pyi @@ -5,7 +5,7 @@ from ._widget import ThemedWidget class ThemedStyle(ttk.Style, ThemedWidget): def __init__( - self, master: tkinter.Misc | None = ..., *, theme: str | None = ..., gif_override: bool | None = ..., **kwargs + self, master: tkinter.Misc | None = ..., *, theme: str | None = None, gif_override: bool | None = False ) -> None: ... # theme_use() can't return None (differs from ttk.Style) def theme_use(self, theme_name: str | None = None) -> str: ... # type: ignore[override] diff --git a/stubs/ttkthemes/ttkthemes/themed_tk.pyi b/stubs/ttkthemes/ttkthemes/themed_tk.pyi index 8bf6ac4c6e5f..5b826ad71b3b 100644 --- a/stubs/ttkthemes/ttkthemes/themed_tk.pyi +++ b/stubs/ttkthemes/ttkthemes/themed_tk.pyi @@ -1,5 +1,5 @@ import tkinter -from _typeshed import Incomplete +from typing import Any from ._widget import ThemedWidget @@ -21,10 +21,56 @@ class ThemedTk(tkinter.Tk, ThemedWidget): background: bool | None = ..., # old alias for themebg gif_override: bool = ..., ) -> None: ... - def set_theme(self, theme_name, toplevel: bool | None = None, themebg: bool | None = 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: Incomplete | None = None, **kwargs): ... # type: ignore[override] - def cget(self, k): ... - def configure(self, kw: Incomplete | None = None, **kwargs): ... # type: ignore[override] - def __getitem__(self, k): ... - def __setitem__(self, k, v) -> None: ... + def set_theme(self, theme_name: str, toplevel: bool | None = None, themebg: bool | None = None) -> None: ... + # Keep this in sync with tkinter.Tk + def config( # type: ignore[override] + self, + kw: dict[str, Any] | None = None, + *, + themebg: bool | None = ..., + toplevel: bool | None = ..., + theme: str | None = ..., + background: str = ..., + bd: tkinter._ScreenUnits = ..., + bg: str = ..., + border: tkinter._ScreenUnits = ..., + borderwidth: tkinter._ScreenUnits = ..., + cursor: tkinter._Cursor = ..., + height: tkinter._ScreenUnits = ..., + highlightbackground: str = ..., + highlightcolor: str = ..., + highlightthickness: tkinter._ScreenUnits = ..., + menu: tkinter.Menu = ..., + padx: tkinter._ScreenUnits = ..., + pady: tkinter._ScreenUnits = ..., + relief: tkinter._Relief = ..., + takefocus: tkinter._TakeFocusValue = ..., + width: tkinter._ScreenUnits = ..., + ) -> dict[str, tuple[str, str, str, Any, Any]] | None: ... + def cget(self, k: str) -> Any: ... + def configure( # type: ignore[override] + self, + kw: dict[str, Any] | None = None, + *, + themebg: bool | None = ..., + toplevel: bool | None = ..., + theme: str | None = ..., + background: str = ..., + bd: tkinter._ScreenUnits = ..., + bg: str = ..., + border: tkinter._ScreenUnits = ..., + borderwidth: tkinter._ScreenUnits = ..., + cursor: tkinter._Cursor = ..., + height: tkinter._ScreenUnits = ..., + highlightbackground: str = ..., + highlightcolor: str = ..., + highlightthickness: tkinter._ScreenUnits = ..., + menu: tkinter.Menu = ..., + padx: tkinter._ScreenUnits = ..., + pady: tkinter._ScreenUnits = ..., + relief: tkinter._Relief = ..., + takefocus: tkinter._TakeFocusValue = ..., + width: tkinter._ScreenUnits = ..., + ) -> dict[str, tuple[str, str, str, Any, Any]] | None: ... + def __getitem__(self, k: str) -> Any: ... + def __setitem__(self, k: str, v: Any) -> None: ...