其他分享
首页 > 其他分享> > PyQt5_QLineEdIt_简版用户登录系统

PyQt5_QLineEdIt_简版用户登录系统

作者:互联网

简版用户登录系统——QLineEdit单行文本框编辑器

  1. 与界面设计无关的业务逻辑抽离
  2. 占位文本的设置
  3. 一次性清空文本内容
  4. 添加自定义行为:密码明文密文切换
  5. 文本自动补全联想
  6. 输入文本的长度限制,并且设置只读属性
  7. 登录判断

######################################将 输入的内容判断,这段与界面设计无关的业务逻辑抽离到类外界

class CHECK_STATE:
    NAME_ERROR = 1
    PASSWORD_ERROR = 2
    SUCCESS = 3

    def judge_(self, name, password):
        if name != 'libai':
            return self.NAME_ERROR
        if password != '89757':
            return self.PASSWORD_ERROR
        return self.SUCCESS


check_state = CHECK_STATE()
#############################将 输入的内容判断,这段与界面设计无关的业务逻辑抽离到类外界


from PyQt5.Qt import *
class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('用户登陆界面')
        self.resize(500, 500)
        self.creat_gui()

    def creat_gui(self):
        self.le_w = 280
        self.le_h = 45
        self.btn_w = 220
        self.btn_h = 55
        self.label_w = 250
        self.label_h = 40
        self.le_x = (self.width() - self.le_w) / 2
        self.btn_x = (self.width() - self.btn_w) / 2
        self.label_x = (self.width() - self.label_w) / 2
        self.le_name_y = self.height() / 5
        self.le_name = QLineEdit(self)
        self.le_name.setStyleSheet('font-size:25px')
        self.le_name.move(self.le_x, self.le_name_y)
        self.le_name.setEchoMode(QLineEdit.Normal)
        self.le_name.resize(self.le_w, self.le_h)
        self.le_pasword = QLineEdit(self)
        self.le_pasword.setStyleSheet('font-size:25px')
        self.le_pasword.move(self.le_x, self.le_name_y * 2)
        self.le_pasword.setEchoMode(QLineEdit.Password)
        self.le_pasword.resize(self.le_w, self.le_h)

        self.btn = QPushButton(self)
        self.btn.setText('登  录')
        self.btn.setStyleSheet('font-size:50px')
        self.btn.move(self.btn_x, self.le_name_y * 4)
        self.btn.resize(self.btn_w, self.btn_h)

        self.label = QLabel(self)
        self.label.setText('登录状态标识')
        self.label.move(self.label_x, self.le_name_y * 3)
        self.label.setStyleSheet('font-size:20px')
        self.label.resize(self.label_w, self.label_h)


        ##117############################################占位文本的设置
        #
        # 现在需求:
        #           占位文本标识
        #
        # 解决方法:
        #           setPlaceholderText()
        #               placeholderText()
        self.le_name.setPlaceholderText('请输入你的尊姓大名')
        self.le_pasword.setPlaceholderText('请输入你的登陆密码')
        ##117###########################占位文本的设置




        ##118############################################一次性清空文本内容的按钮
        self.le_pasword.setClearButtonEnabled(True)#文本框右端会出现一个圆形叉叉按钮
        ##118###########################一次性清空文本内容的按钮




        ##############################################添加自定义行为:密码明文密文切换
        action = QAction(self.le_pasword)
        action.setIcon(QIcon('eye_open.png'))

        def change_():
            if self.le_pasword.echoMode()==QLineEdit.Password:
                action.setIcon(QIcon('eye_close.png'))
                self.le_pasword.setEchoMode(QLineEdit.Normal)
            else:
                action.setIcon(QIcon('eye_open.png'))
                self.le_pasword.setEchoMode(QLineEdit.Password)

        action.triggered.connect(change_)
        self.le_pasword.addAction(action,QLineEdit.TrailingPosition)
        #############################添加自定义行为:密码明文密文切换



        ##############################################文本自动补全联想
        #
        # 现在需求:
        #           想实现文本的自动补全,文本库资料已经拿到了
        #
        # 解决方法:
        #          le.setCompleter(QCompleter(['wangwei','wuise'],le))
        #先创建一个完成器对象,列表和父对象,再由父对象设置一个完成器
        completer = QCompleter(['wwwiki','weilai','rich'],self.le_name)
        self.le_name.setCompleter(completer)
        #############################文本自动补全联想


        ##############################################输入文本的长度限制,并且设置只读属性
        #
        # 现在需求:
        #           限制输入文本的最大长度
        #
        # 解决方法: 
        #           le.setMaxLength(7)   #限制最大字符长度为7
        #
        self.le_name.setMaxLength(9)
        print(self.le_name.maxLength())#获取最大字符长度
        # self.le_name.setReadOnly(True)#设置为只读文本框,无法修改
        self.le_name.setText('wwe')

        #############################输入文本的长度限制,并且设置只读属性
        

        def login_():
            name = self.le_name.text()
            password = self.le_pasword.text()
            state_ID = check_state.judge_(name,password)

            if state_ID==CHECK_STATE.SUCCESS:
                self.label.setText('登录成功!!')
            else:
                if state_ID==CHECK_STATE.NAME_ERROR:
                    self.le_name.setText('')
                    self.le_pasword.setText('')
                    self.label.setText('用户名错误,登录失败……')
                    self.le_name.setFocus()

                elif state_ID==CHECK_STATE.PASSWORD_ERROR:
                    self.le_pasword.setText('')
                    self.label.setText('密码错误,登录失败……')
                    self.le_pasword.setFocus()

        self.btn.clicked.connect(login_)

if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)

    win = MyWindow()

    win.show()
    sys.exit(app.exec_())
特仑苏牛奶好好喝 发布了15 篇原创文章 · 获赞 0 · 访问量 429 私信 关注

标签:le,name,pasword,简版,PyQt5,label,QLineEdIt,btn,self
来源: https://blog.csdn.net/weixin_43717845/article/details/104195199