【Python】Tkinterでマウスの2回のクリック間に線を描画する方法
マウスボタンでウィンドウをクリックすると座標を記録し、指定した2点間に線を描画する――そんなGUIアプリケーションの作成を考えてみましょう。Tkinterには、キーやマウスボタンの操作と関数をバインド(紐付け)できるイベント機構が用意されているため、比較的簡単に実装できます。
2点間に線を描画する基本の手順
- キャンバスウィジェットの作成: 線を描画する領域となるキャンバスを作成し、ウィンドウ内に配置します。
- イベントハンドラの定義: ユーザーがクリックしたときに実行される draw_line() 関数を定義します。
- クリック回数の管理: キャンバス上のクリック回数をカウントするグローバル変数を用意します。
- 線の描画: クリックが2回目になった時点で、1回目と2回目の座標を結ぶ線を描画します。
- イベントのバインド: マウスボタンとコールバック関数をバインドし、クリック操作を関数側で完全に制御できるようにします。
サンプルコード
# 必要なライブラリをインポート
from tkinter import *
from tkinter import ttk
# tkinterのフレーム(ウィンドウ)のインスタンスを作成
win = Tk()
# ウィンドウのサイズを設定
win.geometry("700x350")
# 2点間に線を描画する関数を定義
def draw_line(event):
global click_num
global x1, y1
if click_num == 0:
# 1回目のクリック:始点の座標を記録
x1 = event.x
y1 = event.y
click_num = 1
else:
# 2回目のクリック:終点の座標を記録して線を描画
x2 = event.x
y2 = event.y
canvas.create_line(x1, y1, x2, y2, fill="green", width=10)
click_num = 0
# キャンバスウィジェットを作成
canvas = Canvas(win, width=700, height=350, background="white")
canvas.grid(row=0, column=0)
# 左クリック(Button-1)とdraw_line関数をバインド
canvas.bind("<Button-1>", draw_line)
click_num = 0
win.mainloop()
コードのポイント
canvas.bind("<Button-1>", draw_line) の部分では、マウスの左クリック(Button-1)が押されたタイミングで draw_line() 関数が呼び出されるように設定しています。イベントオブジェクトの event.x と event.y を参照することで、クリックされた位置のキャンバス上の座標を取得できます。
また、1回目のクリックでは始点の座標を変数に保存するだけにとどめ、2回目のクリックで終点の座標が確定した段階で create_line() メソッドによって線を描画します。描画後はカウンターをリセットしているため、その後も繰り返し新しい線を描き足すことができます。
実行結果
上記のコードを実行すると、白いキャンバスを持つウィンドウが表示されます。キャンバス上の任意の場所を2回クリックすると、その2点を結ぶ緑色の太い線が描画されます。

-
PythonとTkinterでデジタル時計を作成する方法【初心者向け解説】
Pythonの標準GUIライブラリ「Tkinter」を使えば、デスクトップアプリケーションを手軽に開発できます。本記事では、Tkinterを活用して、時・分・秒をリアルタイムに表示するデジタル時計を作成する方法を解説します。 デジタル時計の仕組み このプログラムでは、Pythonのtimeモジュールからstrftimeメソッドを使用し、「時:分:秒」形式で現在時刻を取得して表示します。具体的な流れは以下の通りです。 strftime(%H:%M:%S)で現在時刻を文字列として取得する Tkinterのラベル(Label)ウィジェットを作成し、時刻を表示する after()メソッドを使い、20
-
【保存版】LANケーブルで2台のPC間をファイル転送する方法|Windowsの設定手順を徹底解説
パソコンから別のパソコンへデータやファイルを移す方法はたくさんあります。USBメモリや外付けハードディスク、メール、オンラインのファイル転送ツールなどが代表例です。しかし、そのたびにUSBメモリや外付けHDDを抜き差しするのは面倒だと感じたことはありませんか?特に大容量ファイルをやり取りする場合は、オンラインツールよりもLANケーブル(Ethernet)を使う方が断然おすすめです。 LANケーブルを使ったファイル転送は、高速・安全・即時という大きなメリットがあります。この記事では、2台のパソコンをLANケーブルで接続してファイルを転送する方法を、画像付きの手順で詳しく解説します。 なぜLAN