Add options to tkinter widgets (#4363)

In tkinter, `widget['foo'] = bar` and `widget.config(foo=bar)` do the same thing, but they will now type-check differently: the `widget['foo'] = bar` syntax allows 'foo' to be any string (e.g. a variable, not necessarily a Literal) and bar to be any object, while `widget.config(foo=bar)` checks the existence of the option and the type of bar. Similarly, cget takes a Literal argument but __getitem__ takes a string. 

Testing script can still be found at c42a72c53e
This commit is contained in:
Akuli
2020-08-17 23:59:51 +03:00
committed by GitHub
parent f20c565eb3
commit e9ecea0033
5 changed files with 3146 additions and 80 deletions

View File

@@ -5,4 +5,4 @@ flake8==3.8.3
flake8-bugbear==20.1.4
flake8-pyi==20.5.0
isort[pyproject]==5.1.1
pytype>=2020.07.24
pytype>=2020.07.30

File diff suppressed because it is too large Load Diff

View File

@@ -9,21 +9,10 @@ ITALIC: Literal["italic"]
def nametofont(name: str) -> Font: ...
# _TkinterSequence[T] represents a sequence that tkinter understands. It
# differs from typing.Sequence[T]. For example, collections.deque a valid
# Sequence but not a valid _TkinterSequence:
#
# >>> tkinter.Label(font=('Helvetica', 12, collections.deque(['bold'])))
# Traceback (most recent call last):
# ...
# _tkinter.TclError: unknown font style "deque(['bold'])"
_T = TypeVar("_T")
_TkinterSequence = Union[List[_T], Tuple[_T, ...]]
# See 'FONT DESCRIPTIONS' in font man page. This uses str because Literal
# inside Tuple doesn't work.
_FontDescription = Union[
str, Font, Tuple[str, int], Tuple[str, int, str], Tuple[str, int, _TkinterSequence[str]],
str, Font, Tuple[str, int], Tuple[str, int, str], Tuple[str, int, tkinter._TkinterSequence[str]],
]
class _FontDict(TypedDict):

File diff suppressed because it is too large Load Diff

View File

@@ -18,7 +18,9 @@ third_party/2and3/pynamodb/models.pyi
third_party/3/six/__init__.pyi
third_party/3/six/moves/__init__.pyi
# anything that imports tkinter (https://github.com/google/pytype/issues/637)
# anything that imports tkinter
# https://github.com/google/pytype/issues/637
# https://github.com/google/pytype/issues/644
stdlib/3/tkinter/__init__.pyi
stdlib/3/tkinter/dialog.pyi
stdlib/3/tkinter/filedialog.pyi