Skip to content

Commit e69ca58

Browse files
authored
Stubs for ttkthemes (#6024)
1 parent 392c81d commit e69ca58

File tree

10 files changed

+93
-3
lines changed

10 files changed

+93
-3
lines changed

pyrightconfig.stricter.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
"stubs/simplejson",
6060
"stubs/slumber",
6161
"stubs/stripe",
62+
"stubs/ttkthemes",
6263
"stubs/vobject",
6364
"stubs/waitress",
6465
"stubs/Werkzeug"

stdlib/tkinter/__init__.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,7 @@ class _ExceptionReportingCallback(Protocol):
578578
class Tk(Misc, Wm):
579579
master: None
580580
def __init__(
581+
# please update ttkthemes stub if you change this
581582
self,
582583
screenName: str | None = ...,
583584
baseName: str | None = ...,

stdlib/tkinter/ttk.pyi

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ _TtkCompound = Literal["text", "image", tkinter._Compound]
1414
class Style:
1515
master: Any
1616
tk: _tkinter.TkappType
17-
def __init__(self, master: Any | None = ...): ...
17+
def __init__(self, master: tkinter.Misc | None = ...): ...
1818
def configure(self, style, query_opt: Any | None = ..., **kw): ...
1919
def map(self, style, query_opt: Any | None = ..., **kw): ...
2020
def lookup(self, style, option, state: Any | None = ..., default: Any | None = ...): ...
@@ -24,8 +24,11 @@ class Style:
2424
def element_options(self, elementname): ...
2525
def theme_create(self, themename, parent: Any | None = ..., settings: Any | None = ...): ...
2626
def theme_settings(self, themename, settings): ...
27-
def theme_names(self): ...
28-
def theme_use(self, themename: Any | None = ...): ...
27+
def theme_names(self) -> Tuple[str, ...]: ...
28+
@overload
29+
def theme_use(self, themename: str) -> None: ...
30+
@overload
31+
def theme_use(self, themename: None = ...) -> str: ...
2932

3033
class Widget(tkinter.Widget):
3134
def __init__(self, master: tkinter.Misc | None, widgetname, kw: Any | None = ...): ...

stubs/ttkthemes/METADATA.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
version = "3.2"
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from collections.abc import Sequence
2+
3+
from ttkthemes.themed_style import ThemedStyle as ThemedStyle
4+
from ttkthemes.themed_tk import ThemedTk as ThemedTk
5+
6+
# actually a list, but shouldn't be modified
7+
THEMES: Sequence[str]
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
def shift_hue(image, hue): ...
2+
def make_transparent(image): ...
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from typing import Any
2+
3+
def temporary_chdir(new_dir) -> None: ...
4+
def get_file_directory(): ...
5+
def get_temp_directory(): ...
6+
def get_themes_directory(theme_name: Any | None = ..., png: bool = ...): ...
7+
def create_directory(directory): ...
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import _tkinter
2+
from _typeshed import StrPath
3+
from typing import ClassVar
4+
5+
class ThemedWidget:
6+
pixmap_themes: ClassVar[list[str]]
7+
PACKAGES: ClassVar[dict[str, str]]
8+
tk: _tkinter.TkappType
9+
png_support: bool
10+
def __init__(self, tk_interpreter, gif_override: bool = ...) -> None: ...
11+
def set_theme(self, theme_name: str) -> None: ...
12+
def get_themes(self) -> list[str]: ...
13+
@property
14+
def themes(self) -> list[str]: ...
15+
@property
16+
def current_theme(self) -> str: ...
17+
def set_theme_advanced(
18+
self,
19+
theme_name: str,
20+
brightness: float = ...,
21+
saturation: float = ...,
22+
hue: float = ...,
23+
preserve_transparency: bool = ...,
24+
output_dir: StrPath | None = ...,
25+
advanced_name: str = ...,
26+
) -> None: ...
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import tkinter
2+
from tkinter import ttk
3+
4+
from ._widget import ThemedWidget
5+
6+
class ThemedStyle(ttk.Style, ThemedWidget):
7+
def __init__(
8+
self, master: tkinter.Misc | None, *, theme: str | None = ..., gif_override: bool | None = ..., **kwargs
9+
) -> None: ...
10+
# theme_use() can't return None (differs from ttk.Style)
11+
def theme_use(self, theme_name: str | None = ...) -> str: ... # type: ignore
12+
def theme_names(self) -> list[str]: ... # type: ignore
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import tkinter
2+
from typing import Any
3+
4+
from ._widget import ThemedWidget
5+
6+
class ThemedTk(tkinter.Tk, ThemedWidget):
7+
def __init__(
8+
self,
9+
# non-keyword-only args copied from tkinter.Tk
10+
screenName: str | None = ...,
11+
baseName: str | None = ...,
12+
className: str = ...,
13+
useTk: bool = ...,
14+
sync: bool = ...,
15+
use: str | None = ...,
16+
*,
17+
theme: str | None = ...,
18+
# fonts argument does nothing
19+
toplevel: bool | None = ...,
20+
themebg: bool | None = ...,
21+
background: bool | None = ..., # old alias for themebg
22+
gif_override: bool = ...,
23+
) -> None: ...
24+
def set_theme(self, theme_name, toplevel: bool | None = ..., themebg: bool | None = ...) -> None: ...
25+
# TODO: currently no good way to say "use the same big list of kwargs as parent class but also add these"
26+
def config(self, kw: Any | None = ..., **kwargs): ... # type: ignore
27+
def cget(self, k): ...
28+
def configure(self, kw: Any | None = ..., **kwargs): ... # type: ignore
29+
def __getitem__(self, k): ...
30+
def __setitem__(self, k, v): ...

0 commit comments

Comments
 (0)