使用Python在Maya UI中屏蔽密码的文本字段

时间:2013-12-30 10:37:29

标签: python maya

我在Maya中创建了一个UI,用于发送一些信息以便在邮件中呈现。为此,用户必须键入不同的数据,包括用户名和密码。但是在输入密码时,它就像其他文本一样可见。有没有办法让密码看起来像点或星号?该脚本是用Python编写的。以下是用户界面的图像。

enter image description here

4 个答案:

答案 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()

请注意,如果用户尝试编辑密码的中间部分,或尝试以错误的顺序键入密码,则报告的密码将被破坏。我不确定这是否是现实世界中的问题。