wxPythonのパスワード入力ボックスで表示/非表示を切り替える

2024年12月14日土曜日

Python wxPython wxPythonサンプル

今回はwxPythonのTextCtrlでパスワードを表示・非表示にする方法を紹介したいと思います。

結論からいうとそんなことはできない

結論からいいますと、ShowPassWordなど便利な関数はありません。
原始的にウィジェットを切り替える必要がでてきます。

サンプルコード

import wx

def ShowChars(event):
    #ここからが今回の重要なポイント
    if event.GetEventObject().GetValue():
        #チェックボックスがTrueだった場合
        #文字が隠れるテキストボックスを非表示にし、
        #テキストボックスの値を文字が表示されるテキストボックスにセットして
        #文字が表示されるテキストボックスを表示させる
        passwordbox0.Hide()
        passwordbox1.SetValue(passwordbox0.GetValue())
        passwordbox1.Show()
    else:
        #チェックボックスがFalseだった場合
        #文字が表示されるテキストボックスを非表示にし、
        #テキストボックスの値を文字が隠れるテキストボックスにセットして
        #文字が隠れるテキストボックスを表示させる
        passwordbox1.Hide()
        passwordbox0.SetValue(passwordbox1.GetValue())
        passwordbox0.Show()
        
app = wx.App(0)
frame = wx.Frame(None, -1, "")
panel = wx.Panel(frame, -1)

#文字が隠れるテキストボックスをpasswordbox0、文字が表示されるテキストボックスをpasswordbox1とする
#文字が表示されるテキストボックスpasswordbox1は最初の時点では非表示にしておく
passwordbox0 = wx.TextCtrl(panel, -1, "", style=wx.TE_PASSWORD, pos=(10,10))
passwordbox1 = wx.TextCtrl(panel, -1, "", pos=(10,10))
passwordbox1.Hide()
#今回はチェックボックスを使ってパスワードの表示非表示を切り替える
checkbox = wx.CheckBox(panel, -1, "Show Chars", pos=(10,50))
checkbox.Bind(wx.EVT_CHECKBOX, ShowChars)

frame.Show(True)
app.MainLoop()
解説はコード内でコメントアウトしているのでそちらをみてください。
続編として、PassWordCtrlという独自のライブラリでも作ってみたいと思うのでそちらもお楽しみに。

ページ

QooQ