雑にwx.PassWordCtrlを作ってみた【wxPython】

2025年2月26日水曜日

Python wxPython

t f B! P L
ということでそういえばそんなライブラリ作る計画があったなと思いつつ記事を書いていきたいと思います。
その前に皆さんはAngel Beats!というアニメを知っていますか?半年前に一夜で全話みたのですが、いまだに感動シーンなどを見返すと泣けてきます。
私史上一番感動したアニメなので是非見てください。

なぜライブラリを作ったか

まだ以下の記事をご覧になってない場合は先に読んでください。
wxPythonのパスワード入力ボックスで表示/非表示を切り替える
ということでまあ、コードがいちいち複雑なんですね。
そんなわけで関数一つで切り替えることができるライブラリを作ろうということにしました。
注意してほしいのが、素人が作ったクソ雑ライブラリということです。
さらにいうと今回、用意している関数がめちゃんこ少ないです。みかん星です。

ということで、PassWordCtrlのライブラリのコード

必ず、ファイル名は「PWC.py」にしてください。
import wx

class PassWordCtrl:
    def __init__(self, parent, wxId, value="", pos=(0,0), size=(100,20)):
        self.hiding = True
        self.box0 = wx.TextCtrl(parent, wxId, value, pos=pos, size=size)
        self.box1 = wx.TextCtrl(parent, wxId, value, pos=pos, size=size, style=wx.TE_PASSWORD)
        self.box0.Hide()

    def HideChars(self):
        self.box0.Hide()
        self.box1.SetValue(self.box0.GetValue())
        self.box1.Show()
        self.hiding = True

    def ShowChars(self):
        self.box0.Show()
        self.box0.SetValue(self.box1.GetValue())
        self.box1.Hide()
        self.hiding = False

    def SetValue(self, value):
        self.box0.SetValue(value)
        self.box1.SetValue(value)

    def GetValue(self):
        if self.hiding:
            return self.box1.GetValue()
        else:
            return self.box0.GetValue()

    def IsHiding(self):
        return self.hiding
というあずこんなもんです。HideChars()で文字を隠し、ShowChars()で文字を表示させます。
デフォルトでは隠しています。
一応SetValue(value)とGetValue()だけは機能するようになってます。

使用例

一応使用例を出しておきたいと思います。
今回のライブラリを使用するにあたって、Pythonインストールフォルダのlibにライブラリを保存するか、同じディレクトリに保存するかする必要があります。
それでは使用例を行きます。
簡単な仕組みなので解説は省きます。
import wx
import PWC

def ShowChars(event):
    if event.GetEventObject().GetValue():
        passwordbox.ShowChars()
    else:
        passwordbox.HideChars()

def onButton(event):
    wx.MessageBox(passwordbox.GetValue())
    
app = wx.App(0)
frame = wx.Frame(None, -1, "")
panel = wx.Panel(frame, -1)

passwordbox = PWC.PassWordCtrl(panel, -1,pos=10,10))

checkbox = wx.CheckBox(panel, -1, "Show Chars", pos=(10,50))
checkbox.Bind(wx.EVT_CHECKBOX, ShowChars)

button = wx.Button(panel, -1, "GetValue", pos=(10,80))
button.Bind(wx.EVT_BUTTON, onButton)

frame.Show(True)
app.MainLoop()

ということでこんな感じでしょう。
import PWCでしっかりと今回のライブラリを使っています。
んで、チェックボックスで表示非表示を切り替えて、ボタンで値を取得するってだけです。


バージョン2を作るか

バージョン2といっても、ただたんに関数を増やすだけですwxWindowにある関数とwxTextctrlにある関数一通りをこのライブラリでも使えるようにします。
やる気が出たらやりたいと思いますが、正直皆さんの方で手直ししてもらった方が現実的かもしれません。

このブログを検索

要望について

ブログのレイアウトやテーマについての提案をいただきました。現在qooqテーマを適応中です。 語尾を自動でつけるプログラムを作りたいという要望をいただきました。是非紹介したいですがどの言語でどのようなプログラムかなど、お問い合わせフォームで詳しく教えてください!

最近の出来事

最近の出来事
寿司打お勧め75位♪(練習モードだけど)

アンケート

Welcome!

「プログラミング独学ブログ」へようこそ。 Yakinyといいます。幅広い範囲で投稿していますので、ぜひ過去の記事も見てみてください!!コメントも大歓迎です!更新がとまってしまって申し訳ございません

お問い合わせ

名前

メール *

メッセージ *

QooQ