4

wxPython では、パスワード フィールドを次のように作成できます。

wx.TextCtrl(frm, -1, '', style=wx.TE_PASSWORD )

ユーザーがパスワードを確認できるように、このパスワード フィールドを通常の textctrl に動的に変更する方法があるかどうか疑問に思っています。

4

3 に答える 3

3

作成後にテキスト コントロール ウィジェットのスタイル フラグを動的に変更する方法を知りません。一部のウィジェットは、一部の OS でこの種のことを許可し、一部のウィジェットは許可しません。通常モードで 2 つ目のテキスト コントロールを作成し、それを非表示にすることができます。次に、切り替えたい場合は、パスワードで保護されたバージョンの値を取得して非表示にし、値を通常のバージョンに渡して表示します。最後に Layout() も呼び出す必要があるでしょう。

于 2012-05-31T16:11:43.427 に答える
3

コントロールの作成後にスタイル フラグを変更することはできません。

コントロールを破棄して、パスワード フラグなしで新しいコントロールを作成するか、サイザーで 2 つを並べて維持し、1 つを常に非表示にすることができます。切り替えたい場合は、テキストを他のテキスト コントロールにコピーし、一方を非表示にして他方を表示し、サイザーで Layout を呼び出します。

import wx

class Frame(wx.Frame):
    def __init__(self,*args,**kwargs):
        wx.Frame.__init__(self,*args,**kwargs)
        panel= wx.Panel(self)
        self.password_shown= False

        sizer= wx.BoxSizer(wx.VERTICAL)
        self.password_sizer= wx.BoxSizer(wx.HORIZONTAL)
        self.text_password= wx.TextCtrl(panel,style=wx.TE_PASSWORD)
        self.password_sizer.Add(self.text_password,0,wx.ALL,5)
        self.text_no_password= wx.TextCtrl(panel)
        self.text_no_password.Hide()
        self.password_sizer.Add(self.text_no_password,0,wx.ALL,5)
        sizer.Add(self.password_sizer)
        self.button= wx.Button(panel,-1,"Toggle Password")
        sizer.Add(self.button,0,wx.ALL,5)
        self.button.Bind(wx.EVT_BUTTON,self.OnButton)
        panel.SetSizer(sizer)

        self.Show()

    def OnButton(self,event):
        self.text_password.Show(self.password_shown)
        self.text_no_password.Show(not self.password_shown)
        if not self.password_shown:
            self.text_no_password.SetValue(self.text_password.GetValue())
            self.text_no_password.SetFocus()
        else:
            self.text_password.SetValue(self.text_no_password.GetValue())
            self.text_password.SetFocus()
        self.text_password.GetParent().Layout()
        self.password_shown= not self.password_shown


if __name__ == "__main__":
    app= wx.App(0)
    Frame(None)
    app.MainLoop()
于 2012-05-31T16:08:57.087 に答える
-1

これはパスワード エントリではありませんが、style=wx.TE_MULTILINE または TE_RICH を使用できます。それがあなたが求めているものなら。

お役に立てれば

于 2012-05-31T15:23:35.813 に答える