Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2020_k3_python講座第7回
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
k3たっつー
July 11, 2020
Education
0
39
2020_k3_python講座第7回
2020年度のk3のpython講座第7回の内容になります
k3たっつー
July 11, 2020
Tweet
Share
More Decks by k3たっつー
See All by k3たっつー
2020_k3_python講座第8回
tattsu_hitsuzi
0
44
2020_k3_python講座第6回
tattsu_hitsuzi
0
32
2020_k3_python講座第5回
tattsu_hitsuzi
0
66
2020_k3_python講座第4回
tattsu_hitsuzi
0
33
2020_k3_python講座第3回
tattsu_hitsuzi
0
1.1k
2020_k3_python講座第2回
tattsu_hitsuzi
0
44
2020_k3_python講座第1回
tattsu_hitsuzi
0
56
Other Decks in Education
See All in Education
MySmartSTEAM 2526
cbtlibrary
0
190
Padlet opetuksessa
matleenalaakso
10
15k
多様なメンター、多様な基準
yasulab
PRO
5
19k
Surviving the surfaceless web
jonoalderson
0
370
Semantic Web and Web 3.0 - Lecture 9 - Web Technologies (1019888BNR)
signer
PRO
2
3.2k
渡辺研Slackの使い方 / Slack Local Rule
kaityo256
PRO
10
11k
コマンドラインを見直そう(1995年からタイムリープ)
sapi_kawahara
0
660
滑空スポーツ講習会2025(実技講習)EMFT学科講習資料/JSA EMFT 2025
jsaseminar
0
230
子どもが自立した学習者となるデジタルの活用について
naokikato
PRO
0
190
JavaScript - Lecture 6 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
Evaluation Methods - Lecture 6 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
1.3k
【洋書和訳:さよならを待つふたりのために】第1章 出会いとメタファー
yaginumatti
0
250
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Color Theory Basics | Prateek | Gurzu
gurzu
0
200
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
130
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
300
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
69
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
A Tale of Four Properties
chriscoyier
162
24k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
170
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
The Curious Case for Waylosing
cassininazir
0
240
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文など、 端折ってるところは 各自付け足してください