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

【Tkinter】キャンバス上のテキストにアウトライン(枠線)を付ける方法

TkinterのCanvasウィジェットにあるcreate_textメソッドは、テキストオブジェクトの周囲にアウトラインを設定するための「outline」や「border」といった属性を持っていません。そのため、キャンバス上のテキストにアウトラインを付けたい場合は、少し工夫が必要です。ここでは、テキストのバウンディングボックス(bbox)を利用して枠線を描画する方法を解説します。

実装手順

  • 必要なライブラリをインポートし、tkinterフレーム(ウィンドウ)のインスタンスを作成します。

  • root.geometryメソッドを使って、フレームのサイズを設定します。

  • Canvasウィジェットを作成し、高さと幅を指定します。あわせてbackground="white"で背景色を白に設定します。

  • create_text()メソッドを使って、Canvas内にテキストオブジェクトを作成します。サンプルコードのようにフォントや文字色も自由に指定できます。

  • テキストアイテムのバウンディングボックス(bbox)を取得します。bboxは「左上のx座標・y座標」と「右下のx座標・y座標」の4つの値を返します。

  • 取得したbboxの座標データをもとに、create_rectangle()でアウトライン付きの矩形を描画します。

  • 最後に、アプリケーションウィンドウのmainloopを実行して完成です。

サンプルコード

# tkinterライブラリをインポート
from tkinter import *

# tkinterフレーム(ウィンドウ)のインスタンスを作成
root = Tk()

# フレームのサイズを設定
root.geometry("700x350")

# Canvasを作成
canvas = Canvas(root, background="white")
canvas.pack(expand=True)

# Canvas内にテキストを作成
text = canvas.create_text(175, 50, text="Text inside the Canvas", font="Calibri, 20", fill="green")

# テキストのバウンディングボックスを取得
bbox = canvas.bbox(text)

# キャンバステキストにアウトラインを描画
canvas.create_rectangle(bbox, outline="blue")

root.mainloop()

実行結果

このコードを実行すると、緑色のテキストの周囲に青色の枠線(アウトライン)が描画され、以下のような出力が得られます。

【Tkinter】キャンバス上のテキストにアウトライン(枠線)を付ける方法

ポイント: canvas.bbox()が返す座標タプルは、そのままcreate_rectangle()の引数として渡せるため、テキストの位置やサイズが変わっても自動的に枠線が追従します。枠線の色だけでなく、width引数で線の太さを調整することも可能です。

  1. Tkinterでラベルのテキストを取得する方法を解説

    TkinterのLabel(ラベル)ウィジェットは、ウィンドウ上にテキストや画像を表示するために使用される基本的なコンポーネントです。フォントファミリーやパディング、幅・高さなどのオプションを指定することで、ラベルの見た目を自由にカスタマイズできます。ラベルに設定したテキストを取得したい場合は、ラベルウィジェットに対して [text] を指定するだけで、簡単にその値へアクセスできます。以下に具体的なサンプルコードを示します。サンプルコード# 必要なライブラリをインポート from tkinter import * # tkinterフレームのインスタンスを作成 win = Tk() # ウ

  2. Tkinterでボタンのテキストサイズをウィンドウに合わせて動的に変更する方法

    Tkinterのフレーム内にボタンを作成した際、ボタンのテキストをメインウィンドウのサイズに合わせて動的に拡大・縮小させたいケースはよくあります。ボタン自体はButtonウィジェットを使えば簡単に作成できますが、テキストサイズを動的に変化させるには、いくつかの機能を組み合わせる必要があります。この記事では、テキスト付きのボタンを作成し、Gridメソッドのrowconfigure()とcolumnconfigure()を使って、メインウィンドウ(ルートウィンドウ)のリサイズに追従できるようにする方法を解説します。bind(<Configure>)でイベントを結び付けるボタンのテキスト