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
k3たっつー
July 11, 2020
Education
0
32
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
35
2020_k3_python講座第6回
tattsu_hitsuzi
0
26
2020_k3_python講座第5回
tattsu_hitsuzi
0
60
2020_k3_python講座第4回
tattsu_hitsuzi
0
28
2020_k3_python講座第3回
tattsu_hitsuzi
0
1.1k
2020_k3_python講座第2回
tattsu_hitsuzi
0
40
2020_k3_python講座第1回
tattsu_hitsuzi
0
48
Other Decks in Education
See All in Education
Avoin jakaminen ja Creative Commons -lisenssit
matleenalaakso
0
1.1k
インターアクトクラブについて:国際ロータリー第2720地区インターアクト委員会 委員長・大分東ロータリークラブ 阿部 克哉 氏
2720japanoke
0
720
week3@tcue2024
nonxxxizm
0
530
世界の子音探訪記
jamashita
0
130
保育とふりかえりをコネクト! / connect childcare and retrospectives!
psj59129
1
180
電気工学問題集 /eleceng2_practices
kfujita
0
120
パフォーマンス・チューニング入門
oracle4engineer
PRO
2
820
SDGsをアシスト! 現地調査データをアーカイブする技術2024|麻布大学デジタルマッピングワークショップ
fullfull
1
190
Educación digital en la adolescencia
gonz1ale1
0
130
LinkedIn
matleenalaakso
0
2k
Sample-se-one-day-training
levii
0
190
Padlet opetuksessa
matleenalaakso
3
11k
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
21
4k
What's in a price? How to price your products and services
michaelherold
238
11k
How STYLIGHT went responsive
nonsquared
92
4.8k
Product Roadmaps are Hard
iamctodd
45
9.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
22
1.4k
Raft: Consensus for Rubyists
vanstee
133
6.3k
Design by the Numbers
sachag
274
18k
Code Reviewing Like a Champion
maltzj
515
39k
Navigating Team Friction
lara
179
13k
The Cult of Friendly URLs
andyhume
74
5.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
123
39k
The Mythical Team-Month
searls
217
42k
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文など、 端折ってるところは 各自付け足してください