Python3 - Tkinter テキストボックスを作成する (ttk.Entry)

目次

テキストボックスを作成する

テキストボックス (一行の文字列を入力することができるウィジェット) を作成するためには、 tkinter.ttk モジュールの Entry クラスを利用します。

Entry オブジェクトを生成するときは、「親ウィジェット」と「オプション」を指定することができます。

textvariable オプション

textvariable オプションには、 tkinter.Variable オブジェクト (StringVar など) を格納した変数を指定します。

width オプション

テキストボックスの幅を変更したい場合は、 width オプションに「任意の整数」を指定します。

Example

source code

from tkinter import Tk
from tkinter import ttk

class MainFrame(ttk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.configure(padding=(6, 4))
        self.pack()
        self.make_style()
        self.create_widgets()

    def make_style(self):
        pass

    def create_widgets(self):
        self.entry1 = ttk.Entry(self, width=2)
        self.entry1.pack(side="top", anchor="w", padx=4, pady=4)

        self.entry2 = ttk.Entry(self, width=4)
        self.entry2.pack(side="top", anchor="w", padx=4, pady=4)

        self.entry3 = ttk.Entry(self, width=8)
        self.entry3.pack(side="top", anchor="w", padx=4, pady=4)

root = Tk()
root.title("Tkinter win")
frame = MainFrame(root)
frame.mainloop()

result

実行結果

テキストボックスの値を取得する

テキストボックスの値を取得する方法は 2 通り有ります。

1 つ目は、Entry オブジェクトの textvariable オプションで指定した Variable オブジェクトの get メソッドを使います。

2 つ目は、Entry オブジェクトの get メソッドを使います。

Example

source code

from tkinter import StringVar
from tkinter import Tk
from tkinter import ttk

class MainFrame(ttk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.configure(padding=(6, 4))
        self.pack()
        self.make_style()
        self.create_widgets()

    def make_style(self):
        pass

    def create_widgets(self):
        self.entry1_var = StringVar()
        self.entry1 = ttk.Entry(self, textvariable=self.entry1_var,
                                      width=16)
        self.entry1.pack(side="top", anchor="w", padx=4, pady=4)

        self.button1 = ttk.Button(self, text="Variable.get",
                                        command=self.button1_action)
        self.button1.pack(side="top", anchor="w", padx=4, pady=4)

        self.button2 = ttk.Button(self, text="Entry.get",
                                        command=self.button2_action)
        self.button2.pack(side="top", anchor="w", padx=4, pady=4)


    def button1_action(self):
        print("Call button1_action")
        print(self.entry1_var.get())

    def button2_action(self):
        print("Call button2_action")
        print(self.entry1.get())

root = Tk()
root.title("Tkinter win")
frame = MainFrame(root)
frame.mainloop()

result

表示内容:

実行結果

ターミナル (テキストボックスに Hello と入力して、Variable.get ボタンをクリックした時):

Call button1_action
Hello

ターミナル (テキストボックスに Hello と入力して、Entry.get ボタンをクリックした時):

Call button2_action
Hello

テキストボックスの値を消去する

テキストボックスの値を消去する方法は 2 通り有ります。

1 つ目は、Entry オブジェクトの textvariable オプションで指定した Variable オブジェクトの set メソッドを使います。

2 つ目は、Entry オブジェクトの delete メソッドを使います。

Example

source code

from tkinter import StringVar
from tkinter import Tk
from tkinter import ttk

class MainFrame(ttk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.configure(padding=(6, 4))
        self.pack()
        self.make_style()
        self.create_widgets()

    def make_style(self):
        pass

    def create_widgets(self):
        self.entry1_var = StringVar()
        self.entry1 = ttk.Entry(self, textvariable=self.entry1_var,
                                      width=16)
        self.entry1.pack(side="top", anchor="w", padx=4, pady=4)

        self.button1 = ttk.Button(self, text="Variable.set",
                                        command=self.button1_action)
        self.button1.pack(side="top", anchor="w", padx=4, pady=4)

        self.button2 = ttk.Button(self, text="Entry.delete",
                                        command=self.button2_action)
        self.button2.pack(side="top", anchor="w", padx=4, pady=4)


    def button1_action(self):
        self.entry1_var.set("")

    def button2_action(self):
        self.entry1.delete(0, "end")

root = Tk()
root.title("Tkinter win")
frame = MainFrame(root)
frame.mainloop()

result

実行結果

参考リンク