今回も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
|
結果は以下の通りです。
見てのとおり、テキストボックスが表示されるだけでなく、その上に文字を入力することもできますね。
これらのフィールドにデフォルトのプレースホルダー値を置きたい場合はどうすればいいでしょうか?それはとても簡単で、1つのエントリに対して1行のコードしか必要ありません。
ここでは entry.insert(0, text)
を使用します。
ここで text
はテキストボックスの必須値です。
この2つのフィールドに、デフォルト値として Python
と 12345678
を設定しましょう。
結果は以下の通りです。
うまくいけば、あなたもこれでうまくいくでしょう。
この記事もチェック:Pythonのbool関数の使い方|数字、文字列、クラスでの使い方を解説する
まとめ
この記事では、Tkinterを使用してEntryウィジェットを使用する方法について学びました。
今後もTkinterのチュートリアルをお楽しみに!
この記事もチェック:TkinterのScaleウィジェットの使い方を解説する