From the Southern Hemisphere

From the Southern Hemisphere

南半球に移住したプログラマの日々

Pythonでデスクトップアプリ作成入門 第2回

こんにちは、ピコピコくんです。
今回は「Pythonでデスクトップアプリ作成入門」の第2回。前回作ったウィンドウを表示するアプリに、ボタンなどの部品を追加してみましょう。

前回の記事

前回は、Pythonでデスクトップアプリを作成する前の準備と実際にウィンドウを表示するアプリを作成しました。

esthersoftware.hatenablog.com

今回やること

さて今回は、前回作ったウィンドウに2つのラベル、2つのテキスト入力ボックス、そしてボタンを追加します。

ウィンドウ上にあるボタンを押すと、2つのテキスト入力ボックスに入力された文字列を加工してメッセージボックスに表示するという処理を作成しましょう。

追加する部品

・ラベル1・・・文字列「あなたのお名前は?」を表示
・ラベル2・・・文字列「好きな食べ物は?」を表示
・テキスト入力ボックス1・・・名前を入力する
・テキスト入力ボックス2・・・食べ物を入力する
・ボタン・・・クリックしたらメッセージボックスを表示する

サンプルコード

今回はウィンドウに部品を追加します。

# tkinterライブラリの読み込み
import tkinter as tk
# tkinterライブラリのmessageboxモジュールを読み込み
from tkinter import messagebox as mbox

# ウィンドウを作成 [*A]
win = tk.Tk()
win.title("My App")
win.geometry("400x300")

# 部品を作成 [*B]
# ラベル「あなたのお名前は?」を作成
label_name = tk.Label(win, text="あなたのお名前は?")
label_name.pack()

# 名前を入力するテキストボックスを作成
text_name = tk.Entry(win)
text_name.pack()
text_name.insert(tk.END, "太郎") # 初期値を指定

# ラベル「好きな食べ物は?」を作成
label_food = tk.Label(win, text="好きな食べ物は?")
label_food.pack()

# 食べ物を入力するテキストボックスを作成
text_food = tk.Entry(win)
text_food.pack()
text_food.insert(tk.END, "バナナ") # 初期値を指定

# OKボタンを押した時に実行する処理(関数)を作成 [*C]
def ok_click():
    # テキストボックスの内容を得る
    s = text_name.get() + "さんが好きな食べ物は、" + text_food.get()
    # ダイアログを表示
    mbox.showinfo("好きな食べ物", s)

# ボタンを作成 [*D]
okButton = tk.Button(win, text='OK', command=ok_click)
okButton.pack()

# ウィンドウを動かす
win.mainloop()

解説

上記サンプルコードの[*A]から[*D]の部分について解説します。

[*A]

ウィンドウを作成しています。win.title() でウィンドウのタイトルを設定し、win.geometry()でウィンドウのサイズを指定しています。

サイズ指定をするときは、ピクセル単位で"幅x高さ"というフォーマットで書きます。サンプルコードでは"400x300"と記述しているので幅400ピクセル、高さ300ピクセルのウィンドウが表示されます。

[*B]

ウィンドウに表示するテキストボックスとラベルを作成しています。label_name = tk.Label()でラベルを作成し、pack() で作成したラベルをウィンドウに配置します。

text_name = tk.Entry(win) でテキストボックスのインスタンスを作成し、pack() で作成したテキストボックスをウィンドウに配置します。

insert()ではテキストボックスの初期値を設定しています。insert()の第一引数に渡しているtk.ENDは既に対象のテキストボックスに設定されている文字列の後ろに第二引数の文字列を追加するという意味です。

例えば、対象のテキストボックスに "あなたの” という文字列が設定されていた場合にサンプルコードのinsert()を実行すると、テキストボックスには "あなたの" に加えて "好きな食べ物は?" が設定され "あなたの好きな食べ物は?" が設定されることになります。

[*C]

ここではOKボタンが押されたときに実行する関数を作成しています。text_name.get() で名前を入力するテキストボックスに入力された文字列を取得しています。

同様にtext_food.get()で食べ物を入力するテキストボックスの文字列も取得しています。その2つの文字列を加工して変数sに代入しています。

関数の最後にmbox.showinfo()でメッセージボックスの表示を行っています。第一引数はメッセージボックスのタイトルを設定し、第二引数にはメッセージボックス内に表示したい文字列を設定します。

[*D]

ボタンの作成を行っています。ウィンドウに配置するためにpack()を忘れずに。そして最後にmainloop()でウィンドウ(アプリ)を実行します。

実行例

ラベルとテキスト入力ボックス、そしてボタンがあるウィンドウが表示されました。テキスト入力ボックスには任意の文字列を入力することができます。

f:id:EstherSoftware:20200613121449p:plain

ここで「OK」ボタンを押すと、テキスト入力ボックスに入力した名前と食べ物が含まれた文字列がメッセージボックスに表示されます。メッセージボックスの左上の「×」か右下の「OK」ボタンを押すとメッセージボックスが閉じます。

f:id:EstherSoftware:20200613121728p:plain

前回のウィンドウを表示するだけのアプリに比べると、少しアプリらしくなりましたね!

次の記事

次回は、ユーザーが入力した数値に対して何らかの計算を行い、結果を出力するようなアプリを作ろうと思います。お楽しみに。

次回の記事では追加したラベルやテキストボックスの配置やデザインを設定する方法について解説しています。

esthersoftware.hatenablog.com

読者さん募集中

記事を気に入ったら読者登録をお願いします!