Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
2020_k3_python講座第7回
Search
k3たっつー
July 11, 2020
Education
42
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2020_k3_python講座第7回
2020年度のk3のpython講座第7回の内容になります
k3たっつー
July 11, 2020
More Decks by k3たっつー
See All by k3たっつー
2020_k3_python講座第8回
tattsu_hitsuzi
0
46
2020_k3_python講座第6回
tattsu_hitsuzi
0
36
2020_k3_python講座第5回
tattsu_hitsuzi
0
69
2020_k3_python講座第4回
tattsu_hitsuzi
0
35
2020_k3_python講座第3回
tattsu_hitsuzi
0
1.1k
2020_k3_python講座第2回
tattsu_hitsuzi
0
46
2020_k3_python講座第1回
tattsu_hitsuzi
0
58
Other Decks in Education
See All in Education
中小規模私大の教学IRを支えるデータマネジメント ― データ基盤構築の取り組みと実務の現在地 ―
terazawa
0
150
NDIAS Automotive / IoT CTF 2026 Recap - Keyfob & OSINT
himitu23
0
340
Soluciones al examen de Geografía 2026. JULIO (Convocatoria Extraordinaria)
juanmartin2026
1
19k
1人 × AI、1か月でここまで作れる ー 数年前の外注換算3.8〜7.4億円・241〜379人月分の作業を、AI費用 約10万円・31日で
frievea
0
480
[2026前期火5] 論理学(京都大学文学部 前期 第12回)「証明を走らせる:カリー・ハワード対応」
yatabe
0
310
AI Generated Beer
lonbrew
0
120
Sanapilvet opetuksessa
matleenalaakso
1
36k
学生のうちに考えておきたい信頼の話
suisan
1
780
批判的応用言語学ワークショップ(2026-08-12 お茶の⽔⼥⼦⼤学)
terasawat
0
190
The Strengthening Institutions Program
territorium
PRO
0
190
新入社員を「あの子」と呼ばない運動 -PBL その前に- / Stop Calling New Hires "Kids"
aokiplayer
2
860
Carbohydrates: Classification, Structure & Chemical Properties
pawan5505
0
260
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
520
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
280
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Git: the NoSQL Database
bkeepers
PRO
432
67k
The Curse of the Amulet
leimatthew05
3
14k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
Are puppies a ranking factor?
jonoalderson
2
3.9k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
230
Transcript
K3 Python講座 7月11日 担当:HRT 今日のテーマ:tkinter
前回までのおさらい クラス イン スタ ンス 化 クラス インスタンス オブジェクト
A B C
前回までのおさらい データクラス クラスを簡単に定義できる! 一部特殊メソッドを自動生成 使うときはfrom dataclasses import *と
@dataclassを忘れずに クラスオブジェクトを引数にしたり返り値にしたり メソッド [変数名].[メソッド名](引数)と書いて呼び出す関数っぽい やつ
前回までのおさらい 例) Rectクラス
復習問題(L7_0.py) Python講座第4回で作ったブラックジャックゲームを、 データクラスを用いて書き直してみよう。 Cardクラスを作る メソッドは作らなくていい
復習問題解答 追加するコードはこれだけ(あとimport文も) あとは適所card[0], card[1]のようになってるところを card.suit, card.rankに書き換える
今回のテーマ tkinter tkinterとは何ぞや? Canvasでお絵描き イベントを受け付ける
アニメーションさせてみる リファレンス https://web.archive.org/web/20190524140835/http://info host.nmt.edu/tcc/help/pubs/tkinter/web/index.html
tkinterとは何ぞや? グラフィックスやマウス・キーボード入力を扱うことが できるモジュール 「Tcl/Tk」というスクリプト言語+ツールキットのTkを Pythonで利用できる Pythonに標準で付属
tkinterとは何ぞや?(続き) tkinterは様々なウィジェットを提供 ウィジェット…button, menu, canvas等 メインウィンドウにウィジェットを配置して画面を構成 する
ウィジェットの配置にはpack,grid,placeを使う 本講座ではpackのみ取り扱う。他は調べてね
tkinterとは何ぞや?(続き) こんなにたくさんのウィジェットが! Frame…ウィジェットをグループ化 Toplevel…分離したウィンドウを作る Canvas…グラフィックスを扱える
Label…テキストや画像を表示 Button…ボタンを作れる Menu…メニューを作れる その他にも色々!
Canvasでお絵描き まずCanvasを作る
Canvasでお絵描き 以下のようにコードを追加してみる。実行すると…
Canvasでお絵描き なんかカードっぽいのができた
Canvasでお絵描き canvas.create_〇〇で図形を描画 ..rectangle(x0,y0,x1,y1,[option…]) 矩形を描画 ..oval(x0,y0,x1,y1,[option…]) 楕円を描画
..polygon(x0,y0,x1,y1,…,xn,yn,[option…]) 多角形を描画 ..text(x,y,[option…]) テキストを描画
Canvasでお絵描き canvas.create_〇〇で図形を描画 ..line(x0,y0,x1,y1,…,xn,yn,[option…]) 直線を描画 ..arc(x0,y0,x1,y1,[option…]) 円弧を描画
その他色々
Canvasでお絵描き 図形等を描画したときidが割り当てられる shape_id = canvas.create_◦◦() idを使って色々できる
canvas.coords()…描画位置を変えられる canvas.coords(shape_id,x0,y0,x1,y1)など canvas.itemconfigure()…描画内容をいじれる canvas.itemconfigure(shape_id,fill=“red”)など
例題1(L7_1.py) スターミー(?)を描いてみましょう 五芒星は、正五角形の頂点をp0~4としたとき p0⇒p2⇒p4⇒p1⇒p3の順で結ぶと描ける。 p0 p1 p2
p3 p4
正五角形の頂点の求め方 正n角形の外接円の半径をrとする。 正n角形の頂点の座標xk,ykは xk=rcos(2πk/n),yk=rsin(2πk/n) [k=0,1,…n-1] n=5で五角形!
k=0 1 2 3 4 k=0 1 2 3 4 2πk/n ⇒(2πk-π/2)/n
例題解答例
イベントを受け付ける tk.mainloop()はメインウィンドウでイベントを受け付け るよー、という意味 ボタンが押される、キー入力を受けるなどのイベントを 監視し、それらが起こった時に反応する イベント駆動といったりする
イベントをバインド bind (ウィジェット).bind(イベント,イベントハンドラ) 結びつけたウィジェットにのみイベントが働く (ウィジェット).bind()で、そのウィジェットに結びつけら れたイベントをタプル型で返してくれる
bind_all (ウィジェット).bind_all(イベント,イベントハンドラ) フレーム内の全てのウィジェットにイベントが働く
イベントをバインド unbind (ウィジェット).unbind(イベント,イベントハンドラ) 指定イベントを解除 tag_bind
(ウィジェット).tag_bind(tag,イベント,イベントハンドラ) 指定したtagを持つオブジェクトにイベントを結びつける canvas.create_◦◦(…[option])のoptionにtagがある
イベントの種類 Key,KeyPress キーが押された KeyRelease キーが離された Button マウスボタンが押された ButtonRelease マウスボタンが離された Motion
マウスの移動 Enter マウスカーソルがウィンドウに入った Leave マウスカーソルがウィンドウから出た <KeyPress-K>のようにして特定のキーを指定できる <Button-N>のようにして特定のボタンを指定できる (それぞれReleaseも同様)
イベントの種類 Shift Shiftを押しながら… Control Ctrlを押しながら… Alt Altを押しながら… Lock CapsLockを押しながら… Double
ダブルクリック Triple トリプルクリック ButtonN ButtonNを押しながら… モディファイヤと呼ばれる。イベントを修飾できる。 例えば、<Shift-Key-a>で、Shift+aが押されたときのイベントになる。
イベントハンドラ イベントが呼ばれたときに呼ばれる関数、メソッド。 Callback関数などとも呼ばれる。 引数にeventを持たせる。 def clicked(event):など
bind,bind_allメソッドの引数として渡すのは関数オブ ジェクト
間違えやすいポイント 次のコードだと思ったような動作をしない。 関数名()は関数呼び出しなので、clicked()はその時点で 関数が呼ばれてしまう。 ()をつけないで関数名を書けばok(引数eventも忘れず)
じゃあ引数を持った関数呼びたいとき はどうするの? その1.関数の中で関数を宣言する イベント発生時に呼ばれるのは handler
じゃあ引数を持った関数呼びたいとき はどうするの? その2.lambdaを使う lambda 引数: 返り値 の形で書く
意味は def func(引数): と同じ return 返り値 これを使うと以下のように書ける
例 左クリックで矩形を描画 右クリックで一番近くにある 矩形を削除 Enterキーで全部削除
例題2(L7_2.py) カウンターを作成しよう 現在のカウント、最大カウントを描画 カウントの増加、減少、リセットを実装 テキストの中身を変えるのはitemconfigureを使う
例題解答例
応用例
アニメーションさせてみる 矩形を動かすことを考える 座標動かして描画を繰り返せば出来そう… tk.update()で画面の更新、time.sleep()でちょっと止め る(import timeが必要)
アニメーションさせてみる 一度消してからもう一回描く方法もある 描く⇒ちょっと止める⇒画面を更新 の繰り返しでアニメーションができる
例題3(L7_3.py) バブルソートを可視化しよう 配布プログラムを完成させる
バブルソートとは 隣り合う要素の大小を比較しながら整列させるソー トアルゴリズム ①番目の要素と②番目の要素を比較 ⇒①>②なら入れ替え ②番目の要素と③番目の要素を比較 ⇒②>③なら入れ替え
…n番目の要素を除外してまた①から を繰り返す
例題解答例
別解
まとめ tkinterはpython標準搭載のGUIを扱えるモジュール Canvasのcreate_◦◦メソッドで描画ができる イベントを受け付けたいときはbindなどを使う アニメーションは座標を動かすことを繰り返す
Tips:from importとimportの違い from ◦◦ import ××は、◦◦モジュールの××を ◦◦.××とせずに使える。××に入るのはクラス名か 関数名
import ◦◦の場合、××を使いたいとき◦◦.××と する必要がある。 例 from tkinter import Tk ⇒ tk = TK() import tkinter ⇒ tk = tkinter.Tk()
Tips:from importとimportの違い from ◦◦ import * の[ * ]は全部使えるという意味
モジュールの持つクラス、関数名が他のオブジェク トの変数と被らないようにimport 〇〇で〇〇.××と する。 のような使い分け
演習(L7_4) スピードスターを打たせてみよう キー入力orマウス入力で星を飛ばす
演習(L7_4) 余裕のある人は 星のy座標をランダムにする 星の速度をランダムにする 入力を続けると連続して星が出現するようにする
スターミーを回してみる
演習解答例 前スライドの 三つ目まで実装
演習解答例 import文など、 端折ってるところは 各自付け足してください