如何制作wxpython密码textctrl show chars?

时间:2012-05-31 14:56:09

标签: python user-interface wxpython

使用wxPython,密码字段可以创建为:

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

我想知道是否有办法将此密码字段动态更改为普通文本控件,以便用户可以看到密码是什么。

3 个答案:

答案 0 :(得分:3)

创建控件后无法更改样式标志。

你可以破坏控件并创建一个没有密码标志的新控件,或者在sizer中并排保持两个,一个总是隐藏。当你想切换时,你可以将文本复制到另一个文本控件,隐藏一个并显示另一个,然后在sizer上调用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()

答案 1 :(得分:3)

我不知道在创建后动态更改文本控件窗口小部件上的样式标志的方法。有些小部件在某些操作系统上允许这种情况,有些则不允许。您可以在正常模式下创建两个文本控件,第二个文本控件将其隐藏。然后,当您想要切换时,您将获取受密码保护的版本的值并将其隐藏,将值提供给正常版本并显示它。你可能也需要在最后调用Layout()。

答案 2 :(得分:0)

然后它不会是密码输入,但您可以使用style = wx.TE_MULTILINE或TE_RICH。如果这就是你要问的。

希望这有帮助