【问题标题】:how to make wxpython password textctrl show chars?如何使 wxpython 密码 textctrl 显示字符?
【发布时间】:2012-06-05 20:32:04
【问题描述】:

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

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

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

【问题讨论】:

    标签: python user-interface wxpython


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      您可以销毁控件并创建一个不带密码标志的新控件,或者将两个并排保存在一个大小调整器中,一个始终隐藏。当您想要切换时,您可以将文本复制到另一个文本控件中,隐藏一个并显示另一个,然后在 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()
      

      【讨论】:

        【解决方案3】:

        那么这将不是密码条目,但您可以使用 style=wx.TE_MULTILINE 或 TE_RICH。如果这就是你要问的。

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 2023-03-29
          • 2011-03-26
          • 2010-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-17
          • 2014-09-25
          相关资源
          最近更新 更多