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
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
探査機自作ゼミ2025スライド
sksat
3
780
GitHubとAzureを使って開発者になろう
ymd65536
1
160
2025/06/05_読み漁り学習
nag8
0
200
日本の情報系社会人院生のリアル -JAIST 修士編-
yurikomium
1
120
シリコンバレーでスタートアップを共同創業したファウンディングエンジニアとしての学び
tomoima525
1
1.2k
AIの時代こそ、考える知的学習術
yum3
2
200
ARアプリを活用した防災まち歩きデータ作成ハンズオン
nro2daisuke
0
180
社外コミュニティの歩き方
masakiokuda
2
190
Human-AI Interaction - Lecture 11 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
530
2025年度春学期 統計学 第9回 確からしさを記述する ー 確率 (2025. 6. 5)
akiraasano
PRO
0
150
核燃料政策を問う─英国の決断と日本
hide2kano
0
180
Linuxのよく使うコマンドを解説
mickey_kubo
1
260
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.6k
Docker and Python
trallard
46
3.6k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Agile that works and the tools we love
rasmusluckow
330
21k
Building an army of robots
kneath
306
46k
Gamification - CAS2011
davidbonilla
81
5.4k
Rails Girls Zürich Keynote
gr2m
95
14k
Designing Experiences People Love
moore
142
24k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Building Adaptive Systems
keathley
43
2.7k
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文など、 端折ってるところは 各自付け足してください