TkinterのEntry Widget(テキストボックス)を使って文字の入力を受け付ける方法

スポンサーリンク

今回もTkinterチュートリアルシリーズの1つで、Tkinter Entry Widgetを取り上げます。

前回は、TkinterのCanvasウィンドウのコンセプトを説明しました。

今回は、それとは違うことをやってみましょう。

今日の記事はTkinter Entry Widgetについてです。

どんなウィジェットでも、メインアプリケーションの一部です。

ユーザから入力を得たい場合、Entryウィジェットは非常に便利です。

メインアプリケーションにEntryウィジェットを作成し、さらにアプリケーション用の入力テキストボックスを追加して、ユーザがそこに何かを入力できるようにすることができます

さっそく始めてみましょう

スポンサーリンク

Tkinterエントリーウィジェット

このウィジェットでは、1行のテキストを入力することができます

ウィジェットの長さを超える文字列を入力した場合、次の部分を入力するためにスクロールダウンしなければなりません。

これは、名前や電話番号などの小さなフィールドのユーザー入力を取得したい場合に便利です。

では、これをアプリケーションでどのように使うか見てみましょう。

エントリーウィジェットの構文

エントリーウィジェットを宣言するには、以下のような構文を使用します。

entry_object = tk.Entry(master, option, ... )

これは、親ウィンドウの master オブジェクトのハンドルを取ります。

これは、エントリーオブジェクトを配置する場所を示します。

また、option パラメータを使用することで、どの行、どの列に配置するかなどのオプションを指定することができます

ステップ1: アプリケーションにラベルを作成する

その前に、アプリケーションのための Label ウィジェットを作成しましょう。

これを使って、テキストのブロックに名前を付けることができます。

NOTE: canvas.pack() を使用しているので、ラベルのような他のウィジェットと一緒に canvas を使用することはできません。

これらは全く別の目的のためにあります。

キャンバス`は使えませんが、前のチュートリアルのアプリケーションと同じようなテンプレートを再現してみましょう。

import tkinter as tk
 
class Application(tk.Frame):
    def __init__(self, master=None):
        # We need the master object to
        # initialize important stuff
        super().__init__(master) # Call tk.Frame.__init__(master)
        self.master = master # Update the master object after tk.Frame() makes necessary changes to it
 
# Create our master object to the Application
master = tk.Tk()
# Create our application object
app = Application(master=master)
# Start the mainloop
app.mainloop()

Label` ウィジェットを作成するには、次のシンタックスを使用します。

tk.Label(master, text).grid(row)

これで、アプリケーショングリッドの row 番目に、text という文字列とともに挿入されます。

では、それをクラスで書いてみましょう。

ここでは、これを行う createGridLabel という関数を作成します。

def createGridLabel(self, text, row_number):
    # Create a label with the text, on the row number
    tk.Label(self.master, text=text).grid(row=row_number)

さて、プログラム全体を見てみましょう。

import tkinter as tk
 
class Application(tk.Frame):
    def __init__(self, master=None):
        # We need the master object to
        # initialize important stuff
        super().__init__(master) # Call tk.Frame.__init__(master)
        self.master = master # Update the master object after tk.Frame() makes necessary changes to it
    def createGridLabel(self, text, row_number):
        # Create a label with the text, on the row number
        tk.Label(self.master, text=text).grid(row=row_number)
 
# Create our master object to the Application
master = tk.Tk()
# Create our application object
app = Application(master=master)
# Create a label with the following text, on row #0
app.createGridLabel("Name", 0)
app.createGridLabel("Phone Number", 1)
# Start the mainloop
app.mainloop()

結果は以下の通りです。

# Create the entry objects
e1 = tk.Entry(master)
e2 = tk.Entry(master)

画像はとても小さいですが、ラベルは確かに画面に表示されていますね。

では、実際にラベルのための Entry ウィジェットを作ってみましょう。

Entry オブジェクトは tk.Entry(master) を使って作ることができます。

# Place it in it's suitable position
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

では、エントリーを適切な位置に配置しましょう。

最初のエントリは行 0 と列 1 に属し (列 0 にはラベル Name があるため)、2 番目のエントリウィジェットは (1, 1) に配置されます。

import tkinter as tk
 
class Application(tk.Frame):
    def __init__(self, master=None):
        # We need the master object to
        # initialize important stuff
        super().__init__(master) # Call tk.Frame.__init__(master)
        self.master = master # Update the master object after tk.Frame() makes necessary changes to it
    def createGridLabel(self, text, row_number):
        # Create a label with the text, on the row number
        tk.Label(self.master, text=text).grid(row=row_number)
 
# Create our master object to the Application
master = tk.Tk()
 
# Create our application object
app = Application(master=master)
 
# Create a label with the following text, on row #0
app.createGridLabel("Name", 0)
app.createGridLabel("Phone Number", 1)
 
# Create the entry objects
e1 = tk.Entry(master)
e2 = tk.Entry(master)
 
# Place it in it's suitable position
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
 
# Start the mainloop
app.mainloop()

それでは、完全なコードを見てみましょう。

e1.insert(0, "Python")
e2.insert(0, "12345678") # Must be a string, not an integer

結果は以下の通りです。

Label Widget
Label Widget

見てのとおり、テキストボックスが表示されるだけでなく、その上に文字を入力することもできますね。

これらのフィールドにデフォルトのプレースホルダー値を置きたい場合はどうすればいいでしょうか?それはとても簡単で、1つのエントリに対して1行のコードしか必要ありません。

ここでは entry.insert(0, text) を使用します。

ここで text はテキストボックスの必須値です。

この2つのフィールドに、デフォルト値として Python12345678 を設定しましょう。

Entry Widget
Entry Widget

結果は以下の通りです。

Entry Default
Entry Default

うまくいけば、あなたもこれでうまくいくでしょう。

まとめ

この記事では、Tkinterを使用してEntryウィジェットを使用する方法について学びました。

今後もTkinterのチュートリアルをお楽しみに!

タイトルとURLをコピーしました