【Python】Tkinterでパスワード入力欄を「*」にし文字列を表示させない方法

現在、Pythonでデスクトップアプリ「Tkinter」を利用して開発をしています。
このTkinterを利用して、NW機器にSSH接続をしコマンド出力を表示させますが、「パスワード」入力欄で文字列が表示されるのを隠したいので「*」にする方法を紹介します。

「Tkinter」の文字列を隠し、「*」表示にする方法

以下のプログラムはTkinterでデスクトップアプリを立ち上げ、入力欄を記載し、自動でNW機器へアクセス、指定のコマンドを入力し出力結果を表示します。

ここで、パスワード欄に文字列を表示させず、「*」表記にして記入します。
「show」コマンドを使用することにより、文字列入力欄で別の文字に変換し隠してくれます。

※ ssh_test_tkinter_password_sample_00.py

import tkinter
import paramiko
from tkinter import messagebox


#ボタンがクリックされたら実行
def button_click():
    input_host_value = input_name.get()
    input_name_value = input_address.get()
    input_address_value = input_pass.get()
    input_command_value = input_command.get()

    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(input_host_value, username=input_name_value, password=input_address_value)

    stdin, stdout, stderr = client.exec_command(input_command_value)
    stdin.write(input_command_value)

    for o in stdout:
        with open('file.csv', 'a', newline='') as f:
            print(o, end='', file = f)
            print(o)

    for e in stderr:
        print(e)

    client.close()
    root.quit()
    

print('コンフィグ取得 > csvファイル保存完了')


# tkinter_ウインドウの作成
root = tkinter.Tk()
root.title("SSH_LOG_GET GUI")
root.geometry("350x120")

# host/IPaddress
input_name_label = tkinter.Label(text="host")
input_name_label.grid(row=1, column=1, padx=10,)

# host/IPaddress入力欄の作成
input_name = tkinter.Entry(width=40)
input_name.grid(row=1, column=2)

# userID
input_address_label = tkinter.Label(text="name")
input_address_label.grid(row=2, column=1, padx=10,)

# userID入力欄の作成
input_address = tkinter.Entry(width=40)
input_address.grid(row=2, column=2)

# パスワード
input_pass_label = tkinter.Label(text="password")
input_pass_label.grid(row=3, column=1, padx=10,)

# パスワード入力欄の作成
input_pass = tkinter.Entry(show='*', width=40)
input_pass.grid(row=3, column=2)

# コマンド
input_command_label = tkinter.Label(text="command")
input_command_label.grid(row=4, column=1, padx=10,)

# コマンド入力欄の作成
input_command = tkinter.Entry(width=40)
input_command.grid(row=4, column=2)

#ボタンの作成
button = tkinter.Button(text="実行ボタン",command=button_click)
button.place(x=10, y=80)

#ウインドウの描画
root.mainloop()

Tkinterのパスワード表示 ※実行結果

上記プログラムを実行することにより、以下のようにアプリが立ち上がり、パスワード入力欄が「*」と表示されます。

※ 実行結果

パスワード入力欄が「*」となり、文字列が表示されないことが確認できました。

PS C:\Python> python .\ssh_test_tkinter_password_sample_00.py
コンフィグ取得 > csvファイル保存完了
ファイルシス            サイズ  使用  残り 使用% マウント位置

devtmpfs                  475M     0  475M    0% /dev

tmpfs                     487M     0  487M    0% /dev/shm

tmpfs                     487M  7.7M  479M    2% /run

tmpfs                     487M     0  487M    0% /sys/fs/cgroup

/dev/mapper/centos-root    17G  1.6G   16G   10% /

/dev/sda1                1014M  167M  848M   17% /boot

tmpfs                      98M     0   98M    0% /run/user/0

PS C:\Python> 

CSVファイルにも出力結果が書き込まれていることが確認できます。

サンプルコードはそのままコピペで利用できますので、使用してください。
※importモジュールは事前に「pip install」してください。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!