Python
 Computer >> コンピューター >  >> プログラミング >> Python

【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のクリックイベントでキャンバスにドットを描画する方法

  1. PythonのTkinterでスレッドを使う方法|threadingモジュールによる非同期処理の基本

    Tkinterでは、スレッド(Threading)を活用することで、複数の関数を同時に実行できます。これにより、アプリケーション内の処理を非同期で動かすことが可能になります。 Pythonでスレッドを使用するには、まずthreadingモジュールをインポートし、そのThreadクラスを継承した新しいクラスを定義します。そして、クラス内でrunメソッドをオーバーライドし、実行したい処理をその中に記述します。 つまり、スレッドを使えば複数の作業を並行して進めることができます。Tkinterアプリケーションでスレッドを実現する際は、Thread()関数を利用します。 ここでは、「一定時間スリープした

  2. Python Tkinterでキャンバス上の画像を中央に配置する方法

    Tkinterを使ってGUIアプリケーションを開発している際、Tkinterのキャンバス(Canvas)上に画像を読み込みたいケースはよくあります。本記事では、その画像をキャンバスの中央に配置する方法を解説します。anchorパラメータとはデフォルトでは、キャンバスは画像を自身の幅と高さに従って配置します。しかし、anchor(アンカー)パラメータに方向の値を渡すことで、画像の位置を任意の方向(N:北、S:南、E:東、W:西、NS、EWなど)に操作できます。アンカーは画像関数と一緒に呼び出されるパラメータで、キャンバス内における画像の方向や位置を定義します。このanchorパラメータを活用すれ