キャンバスウィジェットへの図形の描画や描画した図形の操作については下記ページで解説していますので、特にキャンバスを利用したアプリ作成について知りたい方はこちらを読んでいただくと良いと思います。, このページでは特に「2. What we'll be doing is creating a Canvas, and inside it creating a window. This made all the difference.I'm guess setting the object returned from.

このページでは特に「2. How to add placeholders to Tkinter Entry fields, Creating Snake Using Tkinter's Canvas Widget (Part 2), A container frame for our canvas and scrollbar, A frame that will become the scrollable frame. Here is the simple syntax to create this widget −. Here we discuss the Introduction to Python Tkinter Canvas along with different examples and code implementation. ・多角形, 四角形を描くにはcanvas.create_rectangle()関数を使用します。, canvas.create_rectangle()関数の引数は、(四角形の左上x座標、四角形の左上y座標、幅、高さ) Advertisements. Learn all about Python's divmod function, which allows us to easily perform floor division and modulo operations in one go! What defines a JRPG, and how is it different from an RPG? The content (with the darkest background) is the "actual size", which usually is also the "scrollable area". Tkinter Frame widget is a container that holds other Tkinter widgets like Label, Entry, Listbox, etc. You can place graphics, text, widgets or frames on a Canvas. Also, don't forget to use Pack or Grid to add the container, canvas, and scrollbar to the application window.

という3ステップです。, キャンパスに書ける図形は、以下の通りです。 描画した図形を操作する」に関しては別途詳細を解説していますので、こちらについて知りたい方は是非リンクから目的のページに移動していただければと思います。, 実行すると下の図のようにメインウィンドウの中に背景が青色の「キャンバスウィジェット」が表示されることが確認できると思います(見た目は OS 等により異なります)。, メインウィンドウが何かわからない方は、下記ページで解説していますのでコチラも読んでみてください。, Tkinter ではメインウィンドウの上にウィジェットの作成や配置を行うことで GUI アプリを開発していきます。, さらに、そのウィジェットの作成や配置は、基本的に「メインウィンドウの作成〜メインループの前」の間に行います。, ですので、GUI アプリを作成する場合は、上記のスクリプトで行っているメインウィンドウの作成(および設定)とメインループ実行部分は毎回記述することになります。, キャンバスウィジェットを実際に作成しているのは下記になります。tkinter.Canvas クラスのインスタンスを生成しており、これによりキャンバスウィジェットが作成されます。, 第1引数に指定するのは、作成するラベルウィジェットを配置する親ウィジェットになります。, 基本的に第1引数には下記を指定します(上記スクリプトではメインウィンドウ app を指定している)。, 配置を行うことで画面に表示されます(厳密には配置した後に mainloop を実行することで表示される)。, ウィジェットの配置については下記ページで解説していますので、詳しく知りたい方はコチラを読んでいただければと思います。, キャンバスウィジェットでは他のウィジェット同様に、コンストラクタ(tkinter.Canvas())にキーワード引数を指定することで様々な設定を行うことが可能です。, このページではこの中の「Stipple に関わる設定」「インサートカーソルの見た目に関わる設定」「スクロールに関わる設定」を除いて解説をしていきたいと思います。, 前者2つについては「おそらく使いどころが少ない」&「私の環境で動作しない」ため説明を省略させていただきます。, 白黒しか色が使えない場合などは有効ですが、現状はいろんな色が使用できるのが当たり前の時代ですので、おそらく使用する機会はほとんどありません, スクロールに関しては、今後作成予定のスクロールバーウィジェットの解説ページで詳細を解説したいと思います。, width・height キーワード引数ではキャンバスウィジェットの幅と高さを設定することができます。, background キーワード引数ではキャンバスウィジェットの背景色を設定することができます。, background もしくは bg にはカラーコードもしくは色の名前の文字列を指定します。, borderwidth キーワード引数ではキャンバスウィジェットの枠の太さを設定することができます。, borderwidth もしくは bd にはピクセル単位で指定します。デフォルト設定は 0 です。, キャンバスの枠は基本的に背景色と同じ色なので(次に説明する relief を使うと背景と異なる色になる)ので、borderwidth を設定してもパッと効果が分かりにくいです。, が、実際に図形を (0, 0) 座標に描画してみると borderwidth の設定の効果がはっきりと分かります。, 下図の左側は borderwidth を設定せずにオレンジ色の長方形を (0, 0) 座標から描画した結果で、右側は borderwidth を 20 に設定してオレンジ色の長方形を (0, 0) 座標から描画した結果になります。, 同じ位置に同じ大きさの長方形を描画しているのですが、右側では枠が太くなった分、その枠に隠れて長方形サイズが小さく見えることが確認できると思います。, relief キーワード引数ではキャンバスウィジェットの見た目を設定することができます。, 枠が無いと見た目が変わりませんので、relief を設定する場合は borderwidth も一緒に設定するようにしましょう。, state キーワード引数ではキャンバスウィジェットの状態を設定することができます。, tkinter.DISABLED を設定すれば、キャンバスウィジェットを無効化することができます。, 上記スクリプトでは create_rectangle メソッドで長方形を描画するときに fill="orange" と disabledfill="gray" を設定しています。, 前者は通常状態(state=tkinter.NORMAL)の長方形の色で、後者は無効状態(state=tkinter.DISABLED)の長方形の色になります。, また create_rectangle で描画した長方形がマウスでクリックされた時のイベント処理を tag_bind メソッドにより設定しています。これにより長方形がクリックされれば “長方形がクリックされました” という文字列がコンソールに表示されるようになっています。, 上記のスクリプトをそのまま実行すると、キャンバスが無効状態なので「長方形の色が "gray"」であることと「クリックしても反応しない(イベント処理が行われない)」ことが確認できると思います。, 一方、上記のスクリプトで state=tkinter.DISABLED 部分を削除して(もしくは state=tkinter.NORMAL に置き換えて)実行すれば、「長方形の色が "orange"」であることと「クリックすると “長方形がクリックされました” とコンソールに表示される(イベント処理が行われる)」ことが確認できると思います。, state の設定だけでは効果は分かりにくいですが、上記のように disabledxxxx の設定や tag_bind メソッドによるイベント設定を行っておくと state の効果が分かりやすいと思います。, tag_bind メソッドについては下記ページで紹介していますので、詳しく知りたい方はこれらのページも是非読んでみてください。, cursor キーワード引数ではキャンバス上に入った時のマウスカーソルの見た目を設定することができます。, 例えば cursor="hand" と指定すれば、キャンバス上にマウスが移動した時のカーソルの見た目が “手” のようになります。, ただし cursor に関しては OS 毎に指定可能な値が異なる可能性が高いので注意してください。, takefocus キーワード引数に True を設定することで、キャンバスウィジェットへのタブキーでのフォーカスを有効化することができます。, デフォルトは False になっていて、タブキーでのキャンバスウィジットへのフォーカスは無効化されています。, アプリを起動してタブキーを押すと、細い線がキャンバスウィジットを囲み、フォーカスがキャンバスウィジットに移ったことが確認できると思います(もしかしたら環境によっては線が表示されない場合などあるかもしれません)。, 何回かタブキーを押せば、ボタンとキャンバスに対して交互にこの線が表示されると思います。, この細い線はフォーカスが当たっていることを示す線で、次から解説するhighlightcolor・highlightbackground・highlightthickness はこのフォーカスが当たっていることを示す線の見た目を変更するための設定になります。, highlightcolor キーワード引数ではフォーカスが当たっていることを示す線の色を設定することができます。, highlightcolor にはカラーコードもしくは色の名前の文字列を指定します。, takefocusr の時同様にアプリを起動してタブキーでフォーカスを移動させると、キャンバスウィジットにフォーカスが当たっていることを示す線の色がオレンジ色になっていることが確認できると思います。, highlightcolor はフォーカスが当たっていることを示す線の色を設定するキーワードでしたが、highlightbackground キーワード引数では逆にフォーカスが当たっていないことを示す線の色を設定することができます。, highlightbackground にはカラーコードもしくは色の名前の文字列を指定します。, タブキーによるフォーカスの移動により、キャンバスを囲う線の色が変化することを確認できると思います。, highlightthickness キーワード引数ではフォーカスが当たっていることを示す線 or フォーカスが当たっていないことを示す線の太さを設定することができます。, キャンバスウィジットに描画したテキストは下記のメソッドを用いることで特定の範囲を選択することができます。, selectbackground キーワード引数ではこの選択した範囲のテキストの背景色を設定することができます。, selectbackground にはカラーコードもしくは色の名前の文字列を指定します。, selectforeground キーワード引数では選択した範囲のテキストの文字の色を設定することができます。, selectforeground にはカラーコードもしくは色の名前の文字列を指定します。, selectborderwidth キーワード引数では選択した範囲を囲う線の太さを設定することができます。, closeenough キーワード引数では、キャンバス上に描画した図形に対してどれくらいマウスが近づいたらその図形にマウスインされたことにするかの度合いを設定することができます。, closeenough に 1 を超える値を設定することで、描画した図形にある程度近づければ、図形上にマウスがあるとみなすことができるようになります。, スクリプト内では長方形を描画しており、図形がアクティブになると(マウスが乗ると)色が赤色に変化するようにしています(create_rectangle メソッドに activefillを指定して設定)。, closeenough を設定していないとマウスが実際に図形に乗らないと色が変わりませんが、上記のように closeenough を設定するとマウスが実際に乗らなくてもマウスがある程度近づけば色が変わるようになります。, 実際に上記スクリプトを実行してマウスを近づけたり遠ざけたりした時の動きは下のアニメのようになります。, 最後に私がキャンバスウィジットを使っていて困った点・注意点だと思ったことを記述しておきます(気付き次第追加していきます)。, width・height で解説したように、キャンバスのサイズは width と height キーワード指定により設定することができます。, ただし、width と height だけを設定した場合、実際のキャンバスウィジェットのサイズは width と height で設定した値よりも若干大きくなります。, 例えば次のスクリプトはキャンバスウィジェット作成時に width=300、height=200 と設定し、最後に winfo_width・winfo_height メソッドでキャンバスのサイズを取得するスクリプトです。, サイズが width と height で設定した値と異なることが確認できると思います。, width と height とキャンバスウィジェットのサイズが異なる理由は、枠のサイズが原因です。具体的には後に説明するフォーカスされていることを表す枠の太さ(highlightthickness)が 0 でないためです。, この太さを 0 に設定すれば(Canvas() に highlightthickness=0 を指定)、width と height とキャンバスウィジェットのサイズが一致するようになります。, borderwidth(bd) が 0 でない場合も width と height とキャンバスウィジェットのサイズが一致しないことになりますので注意してください。, このページではキャンバスウィジェットの作成の仕方、キャンバスウィジェットの設定、キャンバスウィジェット作成時の注意点について解説しました。, キャンバスウィジェットは図形を描画するためのただのキャンバスですが、ウィジェット作成時に様々なキーワード指定により多くの設定を行うことができます。, これによりアプリの見た目をより自分好みのものに仕立てることができますので、どのような設定が可能かは是非覚えておいてください!, だえうホームページのプライバシーポリシー・免責事項についてはこちらに記載しております。.