Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

200918 hannari-python

80 views

Published on

tkinter の話
西本卓也 @nishimotz / @24motz (shuaruta)

2020年9月18日
【オンライン】はんなりPython #32 標準ライブラリなLT会
https://hannari-python.connpass.com/event/183414/

Published in: Technology
  • Be the first to comment

  • Be the first to like this

200918 hannari-python

  1. 1. tkinter の話 2020-09-18 西本 卓也(株式会社シュアルタ) @nishimotz / @24motz 1
  2. 2. おまえ誰よ • 京都(1996年~2002年)→ 現在は広島 • NVDA日本語チーム www.nvda.jp • PyCon mini Hiroshima → 2020年10月10日オンライン開催 • PyCon JP 2020 でコミュニティの話をした • すごい広島 with Pythonで「標準ライブラリなLT会」を紹介された • ソース • tkinterの話題 • https://gist.github.com/nishimotz/ca2d5eac2002b908a7da3aaa2f162f48 • まわり将棋 • https://gist.github.com/nishimotz/67b1e1cd245eadb2b2597db650a8c772 2
  3. 3. 動機 • ゲームセンターあらしと学ぶ プログラミング入門 • 知り合いの息子さんと2回ほど読書会 • この本のアプローチ • 公式 Python • エディタは IDLE • 標準ライブラリだけでスカッシュゲーム • tkinter • 扱わないこと • クラス定義 • データ構造 3
  4. 4. 4
  5. 5. Python で予約語の一覧を出す方法 • 51ページに import keyword が紹介されている 5
  6. 6. tkinter • https://docs.python.org/ja/3/library/tkinter.html • Tcl/Tk の Tk • Tk の仕様書にたらいまわしにされる 6
  7. 7. tkinter/__init__.py より 7 import tkinter from tkinter.constants import * tk = tkinter.Tk() frame = tkinter.Frame(tk, relief=RIDGE, borderwidth=2) frame.pack(fill=BOTH,expand=1) label = tkinter.Label(frame, text="Hello, World") label.pack(fill=X, expand=1) button = tkinter.Button(frame,text="Exit",command=tk.destroy) button.pack(side=BOTTOM) tk.mainloop()
  8. 8. 8
  9. 9. 9
  10. 10. 10
  11. 11. 多重継承による実装 • Fluent Python 第1版 第12章 継承の功罪 • 「標準ライブラリで多重継承を極端に用いている例」として紹介 11 >>> import tkinter >>> def print_mro(cls): ... print(', '.join(c.__name__ for c in cls.__mro__)) ... >>> print_mro(tkinter.Toplevel) Toplevel, BaseWidget, Misc, Wm, object >>> print_mro(tkinter.Canvas) Canvas, Widget, BaseWidget, Misc, Pack, Place, Grid, XView, YView, object >>>
  12. 12. 使い方(公式) 12 import tkinter as tk class Application(tk.Frame): (中略) root = tk.Tk() app = Application(master=root) app.mainloop()
  13. 13. canvas が便利 13 def create_widgets(self): self.cv = tk.Canvas(self, width=440, height=440) # omitted self.cv.create_text(60, 60, text="歩", tag="player") self.cv.pack(side="top") def set_player_pos(self, x, y): self.cv.coords("player", x, y) def set_player_text(self, text): self.cv.itemconfigure("player", text=text) def button_pressed(self): # omitted self.set_player_text("香")
  14. 14. ttk = テーマ付きウィジェット • https://docs.python.org/ja/3/library/tkinter.ttk.html 14 >>> from tkinter import ttk >>> import tkinter >>> root = tkinter.Tk() >>> ttk.Style().configure("TButton", padding=6, relief="flat", background="#ccc") >>> btn = ttk.Button(text="Hello") >>> btn.pack()
  15. 15. これから • 「こんにちはPython」で勉強した人に... • さらに tkinter を深掘りしてもらう? • 割り切りが必要 • 別の GUI ツールキット? • レトロゲームエンジン Pyxel • https://github.com/kitao/pyxel/blob/master/README.ja.md 15

×