Tkinterをもう一度使いやすくする

109 Views

August 21, 26

スライド概要

Tkinterをもう一度使いやすくする

書きやすさとアクセシビリティ

Takuya Nishimoto
@nishimotz
@24motz

PyCon JP 2026

profile-image

Shuaruta Inc. ウェブアクセシビリティ基盤委員会 (WAIC) NVDA日本語版 すごい広島 with Python

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Tkinterをもう一度使いやすくする 書きやすさとアクセシビリティ Takuya Nishimoto @nishimotz @24motz PyCon JP 2026 1 / 31

2.

西本卓也 2 / 31

3.

リポジトリ nishimotz/hello-tkinter-tcl nishimotz/nextpytk 3 / 31

4.

きょう話すこと Tkinter の正体 テーマとレイアウト nextpytk アクセシビリティ 最新情報 4 / 31

5.

スクリーンリーダー NonVisual Desktop Access NVDA日本語版 NVDA日本語チーム libkuraji 日本語点訳エンジン WAIC ウェブアクセシビリティ基盤委員会 5 / 31

6.

shuaruta.com KCトーカー2 nuime.net (スクリーンリーダー自動化) mailgarden.org (メーリングリスト) YouTube @nui_no_oheya 6 / 31

7.

PyCon JP 関連活動 PyCon mini Hiroshima Python Boot Camp コアスタッフ すごい広島 with Python PyCon JP 2024 登壇 PyCon JP 2025 座長 + スプリント 7 / 31

8.

Tcl/Tk 1988年 UNIX のスクリプト言語 Tcl 1991年 X11 の GUI ツールキット Tk John Ousterhout A Philosophy of Software Design 近年 Bob Martin との対談も話題に 8 / 31

9.

Tkinter Python から Tcl/Tk を使いやすくする Python 公式バイナリは Tcl/Tk 自体を同梱 電池入ってます Python 3.14 で Tk 9.0 に移行 9 / 31

10.

こんな連携もできる Matplotlib — グラフを GUI に埋め込み NumPy / Pandas — データ処理と可視化 Pillow — 画像の表示・加工 OpenCV — カメラ映像をリアルタイム表示 10 / 31

11.

ボタンを表示する # Tcl pack [button .button -text "Click Me"] # Tkinter ttk.Button(root, text="Click Me").pack() 11 / 31

12.

Python から Tcl を使う import tkinter tcl = tkinter.Tcl() tcl.eval(''' proc greet {name} { return "hello $name" } ''') print(tcl.eval('greet takuya')) 12 / 31

13.

Tcl で拡張する Python / tkinter Tcl インタープリタ Tcl パッケージ (root.tk) demobox demobox.tm 13 / 31

14.

ジオメトリマネージャー pack: 端から詰める place: 座標 (x, y) grid: 行と列 A B B A B A 14 / 31

15.

pack の空洞 (cavity) モデル 空洞は expand するウィジェットに分配 ① 空の状態 ② A を top に ③ B を bottom に A A 空洞 空洞 空洞 B 15 / 31

16.

grid の weight 行・列ごとに余った空間を比率で分配 ① weight 1:1 ② weight 1:2 A A B 等分 B Bが2倍 ③ weight 0:1 A B 余白は B へ 16 / 31

17.

TTK とネイティブ描画 TTK = Themed Tk テーマ = ウィジェットの look and feel の抽象化 クラシック Tk と TTK はいろいろ挙動が違う ネイティブ描画テーマ Windows Mac に似せて描画する ネイティブなUIオブジェクトではない 色と大きさはカスタマイズしたほうがいい 土台として clam が使いやすい 17 / 31

18.

Windows 11 + TTK clam 18 / 31

19.

nextpytk で GUI 入門 uv run --with nextpytk python 19 / 31

20.

FizzBuzz def fizzbuzz(n): if n % 15 == 0: return "FizzBuzz" if n % 3 == 0: return "Fizz" if n % 5 == 0: return "Buzz" return str(n) 20 / 31

21.

ボタンを押すと何かを実行する import nextpytk app = nextpytk.TkApp() @app.button("hello") def on_hello(): n = app.state.get("n", 0) + 1 return {"n": n, "hello": fizzbuzz(n)} app.run() 21 / 31

22.

折り返しレイアウト 幅が狭くなっても見切れない、横スクロール不 要 幅が広い → 1行に収まる A B C D 幅が狭い → 折り返す A B C D 22 / 31

23.

キーボードで操作したい Tab / Shift+Tab でフォーカス移動 Space / Enter でボタン操作 矢印キーで文字・選択を操作 フォーカスを可視化する 23 / 31

24.

WCAGを「制約」として使う 判別可能 SC 1.4.3 コントラスト(最低限) SC 1.4.10 リフロー SC 2.1.1 キーボード操作可能 ナビゲーション可能 SC 2.4.3 フォーカス順序 SC 2.4.7 フォーカスの可視化 ポインティングデバイス SC 2.5.8 ターゲットのサイズ(最低限) 24 / 31

25.

スクリーンリーダーで操作したい Tk 9.0 まではスクリーンリーダーに対応していない アクセシビリティ API からは画像と認識される デスクトップ自動化も UI Automation を使う TIP 733 標準の GUI 部品がスクリーンリーダー対応 Tk 9.1.0 2026年9月予定 25 / 31

26.

CPython でも対応が進行中 gh-145578 Prepare Tkinter 9.1 screenreader support `tk accessible`(TIP 733)に対応 Python 3.16 ターゲット 26 / 31

27.

アクセシブル属性の設定 API Canvas カスタムウィジェットに対応 PR #153247 オブジェクト指向方式: ウィジェットに `.accessible` プロパティ `entry.accessible.name = 'User name'` 属性: role / name / description / value / state / action / help PR #153246 フラット方式: `Misc` に 18 個のメソッド追加 `tk_set_acc_role` / `tk_get_acc_role` など 27 / 31

28.

TIP 733 のバックエンド Linux: ATK(GNOME Accessibility Toolkit)→ Orca Windows: MSAA(Microsoft Active Accessibility)→ NVDA Narrator (UIA) → 体験が異なる macOS: NSAccessibility → VoiceOver CPython 側の PR で検証済みなのは Linux のみ 28 / 31

29.

← / → でテキストカーソルが動くか macOS / Windows 開発版の Entry / TEntry を検証した Tcl/Tk プロジェクトに問題を報告 チケット e4b27e35 Fixed テキスト編集 ステータスメッセージ NVDA 日本語化の初期を思い出す 29 / 31

30.

Tkinter をもう一度使いやすくする 届く成果は価値とアクセシビリティの掛け算 現代の要求を満たすGUI ダークモード、高解像度 文字サイズ、リサイズ、リフロー、多言語化 デスクトップ自動化、スクリーンリーダー 30 / 31

31.

アクセシビリティ サポーテッド WCAG と実装に興味があればどうぞ ASテスト体験会 9月17日 15時-17時 オンライン https://waic.connpass.com/ 31 / 31