我在Maya中创建了一个UI,用于发送一些信息以便在邮件中呈现。为此,用户必须键入不同的数据,包括用户名和密码。但是在输入密码时,它就像其他文本一样可见。有没有办法让密码看起来像点或星号?该脚本是用Python编写的。以下是用户界面的图像。
答案 0 :(得分:3)
您可以将文本字段的changeCommand设置为将文本保存到变量的函数,并用每个字符的星号替换显示的文本。
import pymel.core as pm
class myWindow():
def __init__(self):
self.password = ''
win = pm.window(title='Test')
lo = pm.columnLayout()
self.pswdField = pm.textField(changeCommand=self.hideText)
win.show()
def hideText(self, *args):
self.password = self.pswdField.getText()
self.pswdField.setText("*" * len(self.pswdField.getText()))
这只是一种方式而且不是很强大......但我肯定会像Daniel指出的那样关注Qt。
答案 1 :(得分:0)
对于我的代码,我尝试过这样的事情:
self.Passwd.keyPressEvent = lambda event : self.encryption()
def encryption(self):
self.a = "*"
self.Passwd.setText(self.Passwd.text() + self.a)
这仅用于在键入时使用*对字符进行编码。 您仍然需要将输入捕获到变量或其他内容中。
并以某种方式隔离密码中不允许的密钥。
希望它开始。
答案 2 :(得分:0)
我发现以下功能最适合上述问题:
self.Passwd = QLineEdit("Password")
self.Passwd.setEchoMode(QLineEdit.Password)
答案 3 :(得分:0)
如果 Qt 太麻烦并且您不需要它 100% 可靠,这可能就足够了。它类似于来自 Argiri 的答案,但它在键入时替换文本,并将每个按键附加到一个变量。
import pymel.core as pm
class LoginWindow():
def __init__(self):
self.password = ""
self.win = pm.window()
lo = pm.columnLayout()
self.userField = pm.textField()
self.passField = pm.textField(textChangedCommand=self.obscure)
self.goButton = pm.button("Login", c=self.go)
self.win.show()
def obscure(self, *args):
new_pw = self.passField.getText()
if len(new_pw) > len(self.password):
self.password+=new_pw[-1]
elif len(new_pw) < len(self.password):
self.password = self.password[0:-1]
self.passField.setText(u"\u2022" * len(self.password))
def go(self, *args):
print ("u: {} p: {}".format(self.userField.getText(), self.password))
pm.deleteUI(self.win)
lw = LoginWindow()
请注意,如果用户尝试编辑密码的中间部分,或尝试以错误的顺序键入密码,则报告的密码将被破坏。我不确定这是否是现实世界中的问题。