こんにちは。
PythonにはTkinterというGUIパッケージがあります。私は過去にMinicondaをインストールしましたが、Tkinterは含まれていませんでした。今回は最初にTkinterをインストールしました。次に、Labelウィジェットを使い、文字を表示させました。この記事は、その時に学んだことの備忘録です。
Tkinterをインストール
Pythonを動かすために、過去にMinicondaをインストール済みです。その時の備忘録は以下です。
上記の記事の通り、過去にMinicondaをインストールした後、Anaconda Navigatorをインストールしました。Anaconda Navigatorは仮想環境をGUIの操作で出来るのでインストールしました。
今回最初に行った操作は以下です。
- Anaconda Navigatorを起動。
- Createボタンを押下。
- 表示されたダイアログで「test-tk」と入力し、Createボタンを押下。
以上で、「test-tk」という名前で新しい環境を作成しました。この時点ではTkinterはまだインストールされていません。
環境の新規作成後、「Anaconda Prompt (Miniconda3)」を管理者権限で起動しました。
「conda activate test-tk」を実行し、新規環境に切り替えました。
「conda list」を実行すると、以下のように出力されました。
# Name Version Build Channel ca-certificates 2021.7.5 haa95532_1 certifi 2021.5.30 py39haa95532_0 openssl 1.1.1k h2bbff1b_0 pip 21.2.4 py38haa95532_0 python 3.9.6 h6244533_1 setuptools 52.0.0 py39haa95532_0 sqlite 3.36.0 h2bbff1b_0 tzdata 2021a h5d7bf9c_0 vc 14.2 h21ff451_1 vs2015_runtime 14.27.29016 h5e58377_2 wheel 0.37.0 pyhd3eb1b0_0 wincertstore 0.2 py39h2bbff1b_0
上記の通り、Tkinterはインストールされていません。
ノートPCがインターネットに接続された状態で、「conda install -c anaconda tk」を実行しました。
「conda list」を実行すると、以下のように出力されました。
ca-certificates 2020.10.14 0 anaconda certifi 2021.5.30 py39haa95532_0 openssl 1.1.1k h2bbff1b_0 pip 21.2.4 py38haa95532_0 python 3.9.6 h6244533_1 setuptools 52.0.0 py39haa95532_0 sqlite 3.36.0 h2bbff1b_0 tk 8.6.10 he774522_0 anaconda tzdata 2021a h5d7bf9c_0 vc 14.2 h21ff451_1 vs2015_runtime 14.27.29016 h5e58377_2 wheel 0.37.0 pyhd3eb1b0_0 wincertstore 0.2 py39h2bbff1b_0
上記の一覧に「tk」が出力されたため、Tkinterがインストールされたことがわかりました。
「python -m tkinter」を実行すると、以下のウィンドウが表示されました。
Tkinterが動くことを確認できました。
ウィンドウを表示
以下はウィンドウを表示させるだけのサンプルプログラムです。
ソース
import tkinter
tk_obj = tkinter.Tk()
tk_obj.mainloop()
Tkinterを使うため、「import tkinter」を最初に記述しています。この記事の前半でインストールしたパッケージ「tk」を使うために、このインポート文が必要です。「tkinter.xyz()」という書き方で、パッケージ「tk」に定義された関数を呼び出すことができます。
インポート文でas節を使うことで、別名を付与できます。例えば、「import tkinter as tk」と記述した場合、「tk.xyz()」という書き方ができます。
「Tk()」メソッドはトップレベルのウィジェットを生成します。上記プログラムではその結果を変数tk_objに格納しています。
「mainloop()」メソッドはウィンドウを表示します。
上記では変数tk_objを使っていますが、一般的にはwindowやrootという変数名にすることが多いようです。
Labelを使ってHello Worldを表示
TkinterにはLabelウィジェットがあります。このウィジェットはテキストや画像を表示するウィジェットです。
ウィジェットを配置するには以下の3つのメソッドがあります。
- grid()
- pack()
- place()
以下のサンプルでは、上記3つのメソッドそれぞれを使っています。
grid()を使ったサンプル
import tkinter
tk_obj = tkinter.Tk()
label = tkinter.Label(tk_obj, text='Hello World 0001')
label.grid()
tk_obj.mainloop()
pack()を使ったサンプル
import tkinter
tk_obj = tkinter.Tk()
label = tkinter.Label(tk_obj, text='Hello World 0002')
label.pack()
tk_obj.mainloop()
place()を使ったサンプル
import tkinter
tk_obj = tkinter.Tk()
label = tkinter.Label(tk_obj, text='Hello World 0003')
label.place(x=0, y=0)
tk_obj.mainloop()
上記のプログラムでは、tkinter.Label()メソッドでLabelウィジェットのインスタンスを生成しています。
Label()メソッドの第1引数には親ウィジェットを指定します。今回はトップレベルのウィジェット(メインのウィンドウ)にLabelウィジェットを配置したいため、変数tk_objを指定しました。
Label()メソッドのヘルプを見ると、引数に「**kw」が定義されています。そのため、キーワードを並べて引数に指定することができます。今回はテキストを指定したいため、「text=’…’」を使っています。ヘルプを見ると、ほかにも指定できるキーワードがいくつかありますが、今回はtextのみ使いました。
上記サンプルではそれぞれ、「label.grid()」、「label.pack()」、「label.place(x=0, y=0)」でLabelウィジェットを配置しています。place()メソッドを引数なしに使った場合は、Labelウィジェットが表示されませんでした。これら3つのメソッドは、ウィジェットの配置の方式が異なるようですが、今回は詳細までは調べませんでした。
以上、参考になれば幸いです。