「Python3」Tkinter Ver.8.6(Entryの作成と使い方)

Tkinter Python

Entryとは?

Entryは、文字列を入力するために使用できるテキストフィールド(一行のテキスト)です。
usernameやpasswordなどの入力に利用されます。

Entryの使用方法

<ソースコード>
from tkinter import *
from tkinter import ttk
from tkinter import font

def button_push():
    print(val.get())

#メインウィンドウの作成
root = Tk()
#ウィンドウのタイトル
root.title('Application')
#Frame作成
frame = ttk.Frame(
    root,
    padding = (30,10)
)
#文字列を得るオブジェクトを生成
val = StringVar()

style = ttk.Style()
style.configure(
    "BW.TEntry",
    foreground="blue",
    background="#000000"
)

font = font.Font(
    family='Helvetica',
    size=20,
    weight='bold',
    underline = True
)

def validate(action, index, value_if_allowed,
        prior_value, text, validation_type, trigger_type, widget_name):
    print(value_if_allowed)
    if text in '0123456789':
        try:
            float(value_if_allowed)
            return True
        except ValueError:
            return False
    else:
            return False

vcmd = (
    root.register(validate),
    '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W'
    )

entry = ttk.Entry(
    frame,
    textvariable = val, #データを格納するオブジェクト
    font = font, #フォント
    width = 20, #横幅
    justify = "right", #配置位置(left, center, right)
    validate = 'key', #入力値の判定タイミングを指定
    validatecommand = vcmd, #判定する関数を指定
    show = "*", #置き換え文字指定
    style = "BW.TEntry", #スタイル
)

scrollbar = ttk.Scrollbar(
    frame,
    command = entry.xview,
    orient = "horizontal",
)

entry['xscrollcommand'] = scrollbar.set

button = ttk.Button(
    frame,
    text = 'OK', #表示する文字
    width = str('OK'), #横幅
    padding = (20, 0), #隙間
    command = button_push #押されたら実行する関数
)
    
#ウィンドウ内にFrameを表示
frame.grid()
#Frame内にEntryを表示
entry.grid(row=0,column=0)
#Frame内にScrollbarを表示
scrollbar.grid(row=1,column=0,sticky=(W,E))
#Frame内にButtonを表示
button.grid(row=2,column=0)
#ウィンドウ表示
root.mainloop()
<出力結果>

Entry 説明01
パスワードのように入力した文字を”*”に置き換えます。また、数字以外の文字が入力できないように、キーボード入力するたびに指定した関数を呼び出します。
Entryオプションを表にまとめます。

オプション 説明
textvariable テキストを格納するオブジェクトを指定
font 文字のスタイル
width 横幅 width = 20
justify 文字揃え位置(right, left) justify =”right”
validate 入力値の判定タイミングを指定 validate = ‘key’
validatecommand 判定する関数を指定 validatecommand = 関数
show 置き換え文字指定 show = “*”
style スタイル
xscrollcommand スクロールバーの設定 xscrollcommand = scrollbar.set
state 状態(normal, active, disabled) state = “normal”

“validatecommand”オプションを表にまとめます。

代数 返り値の内容
‘%d’ アクションコード
1: 挿入
0: 削除
-1: フォーカスイン/アウト、textvariableの変化
‘%i’ インデックス
0以上: 挿入/削除しようとしたカーソルの位置
-1: カーソル位置の関係ないアクション
‘%P’ 変更を許可した場合の文字列
‘%s’ 変更前の文字列
‘%S’ 挿入または削除した文字列
‘%v’ Entryに設定された発火条件
‘focus’, ‘focusin’, ‘focusout’, ‘key’, ‘all’, ‘none’
‘%V’ コールバックした理由
‘focusin’, ‘focusout’, ‘key’, ‘forced’
‘%W’ ウィジェット名の文字列

“validate”オプションを表にまとめます。

場合
‘focus’ フォーカスを得るか失うかしたとき
‘focusin’ フォーカスを得たとき
‘focusout’ フォーカスを失うとき
‘key’ キーボード入力のとき
‘all’ 理由を問わず、入力内容に変化が生じたとき
‘none’ 何もしない

“state”オプションを表にまとめます。

stateオプション 説明
normal 通常の状態
active マウスカーソルがウィジェットの上にあり、マウスをクリックすることで何らかの動作をさせる
disabled プログラムによってウィジェットを無効化する
focus ウィジェットにキーボードフォーカスをする
pressed ウィジェットは押されている
selected チェックボタンやラジオボタンのようなウィジェットでの “オン” や “チェック有” や “選択中” に当たる
background Windows と Mac には “アクティブな” もしくは最前面のウィンドウという概念がある
背面のウィンドウにあるウィジェットには background 状態が設定され、最前面のウィンドウにあるウィジェットでは解除される
readonly ウィジェットはユーザからの変更を受け付けない
alternate ウィジェット特有の切り替え表示
invalid ウィジェットの値が不正

“style”オプションを表にまとめます。

styleオプション 説明
foreground 文字の色 foreground = “#ff0000″又は、foreground = “red”
background 背景の色 background = “#0000ff”又は、foreground = “blue”

ユーザーログイン画面を作成

<ソースコード>
from tkinter import *
from tkinter import ttk

class Application():

    def __init__(self,root):
        self.create_widgets()
        self.grid()
    
    def create_widgets(self):
        #Frame作成
        self.frame = ttk.Frame(
            root,
            padding = (30,10)
            )
        #文字列を得るオブジェクトを生成
        self.val1 = StringVar()
        self.val2 = StringVar()
        #Label生成
        self.label1 = ttk.Label(
            self.frame,
            text = 'your name', #表示する文字
            width = str('your name'), #横幅
            anchor = S, #位置
        )
        self.label2 = ttk.Label(
            self.frame,
            text = 'password', #表示する文字
            width = str('password'), #横幅
            anchor = S, #位置
        )
        #Entry生成
        self.entry1 = ttk.Entry(
            self.frame,
            textvariable = self.val1, #データを格納するオブジェクト
            width = 20 #横幅
        )
        self.entry2 = ttk.Entry(
            self.frame,
            textvariable = self.val2, #データを格納するオブジェクト
            width = 20, #横幅
            show = '*' #文字の置き換え
        )
        #Button生成
        self.button = ttk.Button(
            self.frame,
            text = 'OK', #表示する文字
            width = str('OK'), #横幅
            padding = (20, 0), #隙間
            command = self.button_push #押されたら実行する関数
        )
    
    def button_push(self):
        print('your name :', self.val1.get())
        print('password :', self.val2.get())
    
    def grid(self):
        #ウィンドウ内にFrameを表示
        self.frame.grid()
        #Frame内にLabelを表示
        self.label1.grid()
        #Frame内にEntryを表示
        self.entry1.grid()
        self.label2.grid()
        self.entry2.grid()
        #Frame内にButtonを表示
        self.button.grid()
        

#メインウィンドウの生成
root = Tk()
#ウィンドウのタイトル
root.title('Application')
app = Application(root)
#ウィンドウ表示
root.mainloop()
<出力結果>

Entry 説明02

#ボタンを押すと
your name : root
password : root

このように、ユーザーログイン画面を作成することができます。

コメント

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