【Python/tkinter】Canvas(キャンバス)の使い方

スポンサーリンク
スポンサーリンク

PythonでGUIアプリを作成できるモジュールtkinter(ティーキンター)のCanvasの使い方について解説します。

サンプルコードはモジュールのインポートを from tkinter import * としています。
関数を呼び出す際にパッケージ名の接頭辞 (tk.Frame()tk.)を省略できるのでおすすめです。

スポンサーリンク

Canvasとは

Canvasはtkinterの画面に図形を描画することができるWidget(ウィジェット)です。
描画できる図形は以下になります。

・長方形
・多角形
・楕円
・円弧
・線
・テキスト
・画像
・ビットマップ(標準組み込み画像)

Canvasで図形を描画する

図形を描画するには、まず画面にCanvasを配置して、その中に各図形に応じたメソッドを使用することで描画することができます。

Canvasには図形だけではなく、画像やテキストを表示することも可能です。

図形メソッド
長方形create_rectangle
楕円create_oval
create_line
多角形create_polygon
円弧create_arc
画像create_image
テキストcreate_text
ビットマップcreate_bitmap

試しに図形を描画してみます。


ビットマップは標準で組み込まれた画像を表示することができます。
OSによって違いがありますがWindowsでは以下の図が表示できます。

図は左から “error”, “gray75”, “gray50”, “gray25”, “gray12”, “hourglass”, “info”, “questhead”, “question”, “warning” になります。

Canvasのオプション一覧

Canvasで指定可能なオプション一覧です。

オプション説明値の形式
widthCanvasの幅ピクセル値
heightCanvasの高さピクセル値
bg (background)背景色色名または16進数カラーコード
relief枠線タイプ
(デフォルト値はflat)
flat, solid, groove, raised, ridge, sunken
bd (borderwidth)枠線の幅
relief とセットで設定
ピクセル値
cursorマウスオーバー時のカーソルタイプカーソルタイプ
scrollregionキャンバスをスクロールできる領域の大きさを定義タプル(左, 上, 右, 下)
xscrollcommand横方向スクロールバーのスクロールバー.set を指定
yscrollcommand縦方向スクロールバーのスクロールバー.set を指定
xscrollincrement横方向のスクロールバーの矢印をクリックしたときの移動量
yscrollincrement縦方向のスクロールバーの矢印をクリックしたときの移動量を指定
takefocusタブキーでCanvasにフォーカスするか指定
(デフォルトはFalse)
True, False
highlightcolorフォーカス時の枠線の色色名または16進数カラーコード
highlightbackgroundフォーカスされていない時の線の色色名または16進数カラーコード
highlightthicknessフォーカス時、フォーカスされていない時の枠線の太さピクセル値
selectbackground選択範囲に使用する背景色色名または16進数カラーコード
selectforeground選択範囲に使用する前景色色名または16進数カラーコード
selectborderwidth選択範囲の周りに使用する境界線の幅ピクセル値

幅・高さ(width, height)

Canvasの幅と高さはwidth, heightで指定します。

この例では分かりやすくするために背景色を設定しています。

背景色(bg)

背景色を設定するには、bgbackground)を指定します。
値は色名か16進数カラーコードを指定します。
・参考サイト:色の名前とカラーコードが一目でわかるWEB色見本 原色大辞典

枠線(relief, bd)

reliefで枠線を設定します。
線の太さを変更したい場合はbdを指定します。デフォルトは2pxです。

カーソル(cursor)

cursorを指定するとマウスオーバーした時のカーソルタイプを変更できます。

カーソルのタイプは全部で75個ありますが、実際に使えそうなものは限られています。
以下がサンプルになります。全タイプを確認したい場合はこちらのサイトで確認できます。

アイコンタイプ
arrow
center_ptr
circle
crosshair
draft_large
draft_small
left_ptr
hand1
hand2
tcross
top_left_arrow
X_cursor

スクロール設定(scrollregion, scrollcommand)

スクロール設定を行うことで、キャンバスをスクロールさせて表示領域を変化させることができます。

スクロールを設定するには何段階かステップを踏む必要があります。
1. Scrollbarウィジェットを作成
2. Canvasにスクロール範囲を設定(scrollregion)
3. ScrollbarウィジェットをCanvasに紐づけ(xscrollcommand, yscrollcommand)
4. ScrollbarをCanvasの側に配置

スクロールバー矢印クリック時の移動量(scrollincrement)

スクロールバーの矢印をクリックした時の移動量を設定することができます。

下の左側がデフォルト時、右側がxscrollincrement, yscrollincrementを「2」に設定した時の動作です。移動量が変更されています。

フォーカス設定

また、フォーカス時とフォーカスしていない時の線の色と太さを設定することができます。
フォーカス時の線の色:highlightcolor
フォーカスしていない時の線の色: highlightbackground
枠線の太さ:highlightthickness

選択範囲の設定

Canvasに描画したテキストは特定の範囲を選択して選択範囲を装飾することができます。

装飾は背景色、文字色、枠線の太さを設定できます。
背景色:selectbackground
文字色:selectforeground
枠線の太さ:selectborderwidth

設定を適用するには、Canvasの設定と合わせてテキストの選択範囲をcanvas.select_from(タグ名, 開始位置)と canvas.select_to(タグ名, 終了位置)で指定します。


以上でCanvasの使い方の解説は終了です。

以下の記事も参考にしてみて下さい。
・関連記事:PythonでGUIアプリを作成する(tkinter)
・関連記事:【Python/tkinter】Label(ラベル)の使い方
・関連記事:【Python/tkinter】Button(ボタン)の使い方
・関連記事:【Python/tkinter】Entry(エントリー)の使い方