问题描述
pass_txt = wx.TextCtrl(self,style=wx.TE_PASSWORD | wx.TE_PROCESS_ENTER)
我用它来创建一个密码框,它在插入过程中显示黑点以隐藏密码。如果 CapsLock 处于活动状态,它还会显示一个向上的小箭头。
我需要的是在盒子内添加一个小眼睛之类的东西,按下时会显示密码。我该怎么做?
解决方法
正如其他人已经评论过的那样,最简单的方法是创建一个隐藏的 TextCtrl 并将其更改为密码小部件。
BoxSizer 在这些情况下非常有用。我给你留下一个非常简单的例子。
DB_URL
最后,我推荐使用 WxGlade 在 wxpython 中设计您的图形界面。
,有点意思,所以这里是Dialog
:
import wx
class LoginDialog(wx.Dialog):
"""
Login dialog
"""
def __init__(self):
wx.Dialog.__init__(self,None,title="Login")
self.logged_in = False
self.password_shown= False
self.username = wx.TextCtrl(self,-1)
self.hidden_password = wx.TextCtrl(self,-1,style=wx.TE_PASSWORD)
self.visible_password = wx.TextCtrl(self)
self.visible_password.Hide()
self.lock = wx.StaticBitmap(self,wx.Bitmap('lock.png'))
self.login = wx.Button(self,"Login")
self.password_sizer = wx.BoxSizer(wx.HORIZONTAL)
self.password_sizer.Add(self.hidden_password,wx.ALL,5)
self.password_sizer.Add(self.visible_password,5)
self.password_sizer.Add(self.lock,5)
mainsizer= wx.BoxSizer(wx.VERTICAL)
mainsizer.Add(self.username,5)
mainsizer.Add(self.password_sizer)
mainsizer.Add(self.login,5)
self.lock.Bind(wx.EVT_LEFT_DOWN,self.OnToggle)
self.login.Bind(wx.EVT_BUTTON,self.OnLogin)
self.username.SetToolTip("Username")
self.hidden_password.SetToolTip("Input password")
self.visible_password.SetToolTip("Input password")
self.lock.SetToolTip("Lock/Unlock password\nFor test purposes the password is\npassword1")
self.SetSizer(mainsizer)
def OnToggle(self,event):
self.hidden_password.Show(self.password_shown)
self.visible_password.Show(not self.password_shown)
if not self.password_shown:
self.visible_password.SetValue(self.hidden_password.GetValue())
self.visible_password.SetFocus()
else:
self.hidden_password.SetValue(self.visible_password.GetValue())
self.hidden_password.SetFocus()
self.hidden_password.GetParent().Layout()
self.password_shown = not self.password_shown
def OnLogin(self,event):
'''
Perform your username/password vetting here
or return the username/password pair for processing
'''
stupid_password1 = "password1"
user_password1 = self.hidden_password.GetValue()
if user_password1 == stupid_password1:
self.logged_in = True
self.Close()
else:
wx.MessageBox('Login failed','Error',wx.OK | wx.ICON_ERROR)
self.Close()
class MyPanel(wx.Panel):
def __init__(self,parent):
wx.Panel.__init__(self,parent)
user_lbl = wx.StaticText(self,label="Log in Successfull")
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,title="Main App")
panel = MyPanel(self)
# Ask user to login
dlg = LoginDialog()
dlg.ShowModal()
authenticated = dlg.logged_in
dlg.Destroy()
if not authenticated:
wx.MessageBox('Login failed',wx.OK | wx.ICON_ERROR)
self.Destroy()
self.Show()
if __name__ == "__main__":
app = wx.App()
frame = MainFrame()
app.MainLoop()