【Python】Tkinterのクリックイベントでキャンバスにドットを描画する方法
マウスボタンでウィンドウをクリックすると、その座標を記録してドットを描画するGUIアプリケーションを作成するケースを考えてみましょう。Tkinterには、キーやボタンを関数にバインド(紐付け)できるイベント機能が用意されており、これを利用することで簡単に実装できます。
クリックイベントでドットを描画する基本の手順
クリックイベントでドットを描画するには、以下の手順に従います。
キャンバスウィジェットを作成し、ウィンドウ内に表示されるよう配置します。
ユーザーがクリックしたときに動作するイベントハンドラとして、draw_dot() 関数を定義します。
キャンバス上のクリック回数をカウントするためのグローバル変数を作成します。
カウントが2になったら、1つ目と2つ目の座標の間に線を描画します。
マウスボタンをコールバック関数にバインドすることで、クリック時の動作を完全に制御できるようにします。
サンプルコード
# 必要なライブラリをインポート
from tkinter import *
from tkinter import ttk
# tkinterフレーム(ウィンドウ)のインスタンスを作成
win = Tk()
# ウィンドウサイズを設定
win.geometry("700x350")
# 2点間に線を描画する関数を定義
def draw_line(event):
x1 = event.x
y1 = event.y
x2 = event.x
y2 = event.y
# 指定した座標に楕円(ドット)を描画
canvas.create_oval(x1, y1, x2, y2, fill="black", width=20)
# キャンバスウィジェットを作成
canvas = Canvas(win, width=700, height=350, background="white")
canvas.grid(row=0, column=0)
# 左クリック(Button-1)に関数をバインド
canvas.bind('<Button-1>', draw_line)
click_num = 0
win.mainloop()
ポイント解説
このコードの重要なポイントは以下の通りです。
event.x / event.y:クリックされた位置のX・Y座標を取得できます。
canvas.create_oval():楕円を描画するメソッドです。始点と終点に同じ座標を指定し、
width=20を設定することで、小さな黒いドットとして表示されます。canvas.bind('<Button-1>', draw_line):左クリック(Button-1)が押されたタイミングで
draw_line関数が呼び出されるよう設定しています。
実行結果
上記のコードを実行するとウィンドウが表示されます。キャンバス内の任意の場所をクリックすると、その位置に黒いドットが描画されます。

-
PythonのTkinterでスレッドを使う方法|threadingモジュールによる非同期処理の基本
Tkinterでは、スレッド(Threading)を活用することで、複数の関数を同時に実行できます。これにより、アプリケーション内の処理を非同期で動かすことが可能になります。 Pythonでスレッドを使用するには、まずthreadingモジュールをインポートし、そのThreadクラスを継承した新しいクラスを定義します。そして、クラス内でrunメソッドをオーバーライドし、実行したい処理をその中に記述します。 つまり、スレッドを使えば複数の作業を並行して進めることができます。Tkinterアプリケーションでスレッドを実現する際は、Thread()関数を利用します。 ここでは、「一定時間スリープした
-
Python Tkinterでキャンバス上の画像を中央に配置する方法
Tkinterを使ってGUIアプリケーションを開発している際、Tkinterのキャンバス(Canvas)上に画像を読み込みたいケースはよくあります。本記事では、その画像をキャンバスの中央に配置する方法を解説します。anchorパラメータとはデフォルトでは、キャンバスは画像を自身の幅と高さに従って配置します。しかし、anchor(アンカー)パラメータに方向の値を渡すことで、画像の位置を任意の方向(N:北、S:南、E:東、W:西、NS、EWなど)に操作できます。アンカーは画像関数と一緒に呼び出されるパラメータで、キャンバス内における画像の方向や位置を定義します。このanchorパラメータを活用すれ