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
人間関係に取り組む、その時に / step away to make space
spring_aki
0
140
新型コロナ禍をともに「楽しみながら開いていこう!」 :中門 吉松 会員(2720 Japan O.K.ロータリーEクラブ)卓話 : 2026.10.19.例会・卓話
2720japanoke
0
230
響け!ユーフォニアムと考える「決め方」/Thinking About Decision-Making with Sound! Euphonium
3l4l5
1
200
Modulo : abc
robintux
0
240
Tema 1. El relieve de España: Formación y características
juanmartin2026
0
39k
Quality Control of Crude Drugs
pawan_pharm
0
200
Carbohydrates: Classification, Structure & Chemical Properties
pawan_pharm
0
330
【ainiチャット操作ガイド】
ainischool
0
120
医療事務養成の専門学校でのAI教育 非エンジニアの学生にAIを1年間使ってもらって、感じたこと
naochim2026
0
140
【ホスト用】ainiチャット操作ガイド
ainischool
0
120
Introduction - Lecture 1 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
3.5k
2026年度秋学期 統計学 講義の進め方と成績評価について (2026. 9. 28)
akiraasano
PRO
0
240
Featured
See All Featured
Building an army of robots
kneath
307
47k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Technical Leadership for Architectural Decision Making
baasie
3
600
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
990
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
630
The Curious Case for Waylosing
cassininazir
1
570
Google's AI Overviews - The New Search
badams
0
1.6k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
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文など、 端折ってるところは 各自付け足してください