java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

Python | TkinterでHello Worldを表示

投稿日:

最終更新日:2021年09月05日

アイキャッチ

こんにちは。

PythonにはTkinterというGUIパッケージがあります。私は過去にMinicondaをインストールしましたが、Tkinterは含まれていませんでした。今回は最初にTkinterをインストールしました。次に、Labelウィジェットを使い、文字を表示させました。この記事は、その時に学んだことの備忘録です。

Tkinterをインストール

Pythonを動かすために、過去にMinicondaをインストール済みです。その時の備忘録は以下です。

上記の記事の通り、過去にMinicondaをインストールした後、Anaconda Navigatorをインストールしました。Anaconda Navigatorは仮想環境をGUIの操作で出来るのでインストールしました。

今回最初に行った操作は以下です。

  1. Anaconda Navigatorを起動。
  2. Createボタンを押下。
  3. 表示されたダイアログで「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-version

Tkinterが動くことを確認できました。

ウィンドウを表示

以下はウィンドウを表示させるだけのサンプルプログラムです。

ソース

import tkinter

tk_obj = tkinter.Tk()

tk_obj.mainloop()
tkinter-window

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()
tkinter-hello-world-0001

pack()を使ったサンプル

import tkinter

tk_obj = tkinter.Tk()

label = tkinter.Label(tk_obj, text='Hello World 0002')
label.pack()

tk_obj.mainloop()
tkinter-hello-world-0002

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-hello-world-0003

上記のプログラムでは、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つのメソッドは、ウィジェットの配置の方式が異なるようですが、今回は詳細までは調べませんでした。

以上、参考になれば幸いです。