QLineEdit文本的设置和获取---登录案例

1、案例:创建一个窗口,添加两个文本框和一个按钮:点击按钮后可以将文本框A内中的输入内容复制到文本框B中。

       首先是创建控件、监听按钮的点击、获取文本框A中的内容,设置到文本框B中。

import sys
from PyQt5.Qt import *

# 做成活动模块,修改方便
# 1、创建应用程序,可以传递参数给app,通过命令行输入参数
app = QApplication(sys.argv)
window = QWidget()

window.setWindowTitle("文本的设置与获取---案例")
window.resize(500, 500)
le_a = QLineEdit(window)
le_a.move(100, 200)
le_b = QLineEdit(window)
le_b.move(100, 300)
copy_btn = QPushButton(window)
copy_btn.move(100, 400)
copy_btn.setText("复制")
# 监听按钮事件都可
# pressed是监听鼠标按下,clicked是监听鼠标按下并松开那一刻才会发射信号
def copy_text():
    str = le_a.text()
    le_b.setText(str)
    # 方法二
    le_b.setText("")
    le_b.insert(str)
copy_btn.clicked.connect(copy_text)
window.show()
sys.exit(app.exec_())

2、输出模式的设置:通过怎样的模式展示输入的文本。类型一QLineEdit.NoEcho是密文的格式,显示的是一个空白,无法看出长度、内容; 类型二Nomal普通模式、password密文的形式、passonecoedit是用户输入过程可以看到文本内容,完成之后则显示为密文

QLineEdit文本的设置和获取---登录案例_第1张图片

 3、案例:文本输出模式登录案例

QLineEdit文本的设置和获取---登录案例_第2张图片

将局部变量保存到属性中,在所有方法中该属性都可以使用(添加self)。属性定义在__init__方法之外,报警告
import sys
from PyQt5.Qt import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("登录案例")
        self.resize(500, 500)
        self.setMinimumSize(400, 400)
        self.setup_ui()

    def setup_ui(self):
        # 添加三个控件
        # 将局部变量保存到属性中,在所有方法中该属性都可以使用
        # 属性定义在__init__方法之外,报警告
        self.account_le = QLineEdit(self)
        self.pwd_le = QLineEdit(self)
        self.login_btn = QPushButton(self)
        self.login_btn.setText("登   录")


    # 设置控件随窗口的大小改变而改变
    def resizeEvent(self, evt):
        widget_w = 120
        widget_h = 20
        margin = 60
        self.account_le.resize(widget_w, widget_h)
        self.pwd_le.resize(widget_w, widget_h)
        self.pwd_le.resize(widget_w, widget_h)

        # 控件的横坐标
        x = (self.width() - widget_w) / 2
        # 暂时先给定一个y值
        self.account_le.move(x, self.height() / 5)
        self.pwd_le.move(x, self.account_le.y() + margin + widget_h)
        self.login_btn.move(x, self.pwd_le.y() + margin + widget_h)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.setWindowTitle("")
    window.resize(500, 500)
    window.show()
    sys.exit(app.exec_())

 登录案例下:代码尽量减少if else的应用,推荐写法一。

import sys
from PyQt5.Qt import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("登录案例")
        self.resize(500, 500)
        self.setMinimumSize(400, 400)
        self.setup_ui()

    def setup_ui(self):
        # 添加三个控件
        # 将局部变量保存到属性中,在所有方法中该属性都可以使用
        # 属性定义在__init__方法之外,报警告
        self.account_le = QLineEdit(self)
        self.pwd_le = QLineEdit(self)
        # 设置为密文格式
        self.pwd_le.setEchoMode(QLineEdit.Password)
        self.login_btn = QPushButton(self)
        self.login_btn.setText("登   录")
        # 连接槽函数
        self.login_btn.clicked.connect(self.login_cao)

    # 定义一个槽函数,监听信号
    def login_cao(self):
        # 获取账号和密码
        account = self.account_le.text()
        pwd = self.pwd_le.text()
        print(account, pwd)
        # 推荐写法
        if account != "sz":
            print("账号错误")
            self.account_le.setText()
            self.account_le.setFocus()
            return None
        if pwd != "123":
            print("密码错误")
            self.pwd_le.setText("")
            self.pwd_le.setFocus()
            return None
        print("登录成功")
        # 方法二
        # if account == "sz":
        #     if pwd == "123":
        #         print("登录成功!")
        #     else:
        #         print("密码错误!")
        #         self.pwd_le.setText("")
        #         # 获取焦点,密码错误之后可以直接在重新输入密码,不需要人工获取
        #         self.pwd_le.setFocus()
        # else:
        #     print("账号错误!")
        #     self.pwd_le.setText("")
        #     self.account_le.setText("")
        #     # 账号文本框获取焦点
        #     self.account_le.setFocus()
    # 设置控件随窗口的大小改变而改变
    def resizeEvent(self, evt):
        widget_w = 120
        widget_h = 20
        margin = 60
        self.account_le.resize(widget_w, widget_h)
        self.pwd_le.resize(widget_w, widget_h)
        self.pwd_le.resize(widget_w, widget_h)

        # 控件的横坐标
        x = (self.width() - widget_w) / 2
        # 暂时先给定一个y值
        self.account_le.move(x, self.height() / 5)
        self.pwd_le.move(x, self.account_le.y() + margin + widget_h)
        self.login_btn.move(x, self.pwd_le.y() + margin + widget_h)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.setWindowTitle("")
    window.resize(500, 500)
    window.show()
    sys.exit(app.exec_())

封装一个类,在类的内部提供一个方法,(这个方法是可以直接传递一个账号和密码,帮你验证获得结果,可以知道是那种错误或者是否登录成功)

账号与密码的操作被封装,修改方便,也可以重新使用。添加self的是实例方法,很多时候可以去掉self,将他变为静态方法,参数可以对应。

import sys
from PyQt5.Qt import *

# 自定义一个关于账号操作的工具类,不需要继承任何类
class AccountTool:
    # 将类属性当作枚举值使用
    ACCOUNT_ERROR = 1
    PWD_ERROE = 2
    SUCCESS = 3
    # 把账号和密码发送给服务器,等待服务器返回结果
    # 添加self的是实例方法,很多时候可以去掉self,将他变为静态方法,参数就可以对应
    # def check_login(self, account, pwd):
    @staticmethod
    def check_login(account, pwd):
        if account != "sz":
            return AccountTool.ACCOUNT_ERROR
        if pwd != "123":
            return AccountTool.PWD_ERROE
        return AccountTool.SUCCESS

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("登录案例")
        self.resize(500, 500)
        self.setMinimumSize(400, 400)
        self.setup_ui()

    def setup_ui(self):
        # 添加三个控件
        # 将局部变量保存到属性中,在所有方法中该属性都可以使用
        # 属性定义在__init__方法之外,报警告
        self.account_le = QLineEdit(self)
        self.pwd_le = QLineEdit(self)
        # 设置为密文格式
        self.pwd_le.setEchoMode(QLineEdit.Password)
        self.login_btn = QPushButton(self)
        self.login_btn.setText("登   录")
        # 连接槽函数
        self.login_btn.clicked.connect(self.login_cao)

    # 定义一个槽函数,监听信号
    def login_cao(self):
        # 获取账号和密码
        account = self.account_le.text()
        pwd = self.pwd_le.text()
        state = AccountTool.check_login(account, pwd)
        if state == AccountTool.ACCOUNT_ERROR:
            print("账号错误")
            self.account_le.setText()
            self.account_le.setFocus()
            return None
        if state == AccountTool.PWD_ERROE:
            print("密码错误")
            self.pwd_le.setText("")
            self.pwd_le.setFocus()
            return None
        if state == AccountTool.SUCCESS:
            print("登录成功")

        # 推荐写法
        # if account != "sz":
        #     print("账号错误")
        #     self.account_le.setText()
        #     self.account_le.setFocus()
        #     return None
        # if pwd != "123":
        #     print("密码错误")
        #     self.pwd_le.setText("")
        #     self.pwd_le.setFocus()
        #     return None
        # print("登录成功")
        # 方法二
        # if account == "sz":
        #     if pwd == "123":
        #         print("登录成功!")
        #     else:
        #         print("密码错误!")
        #         self.pwd_le.setText("")
        #         # 获取焦点,密码错误之后可以直接在重新输入密码,不需要人工获取
        #         self.pwd_le.setFocus()
        # else:
        #     print("账号错误!")
        #     self.pwd_le.setText("")
        #     self.account_le.setText("")
        #     # 账号文本框获取焦点
        #     self.account_le.setFocus()
    # 设置控件随窗口的大小改变而改变
    def resizeEvent(self, evt):
        widget_w = 120
        widget_h = 20
        margin = 60
        self.account_le.resize(widget_w, widget_h)
        self.pwd_le.resize(widget_w, widget_h)
        self.pwd_le.resize(widget_w, widget_h)

        # 控件的横坐标
        x = (self.width() - widget_w) / 2
        # 暂时先给定一个y值
        self.account_le.move(x, self.height() / 5)
        self.pwd_le.move(x, self.account_le.y() + margin + widget_h)
        self.login_btn.move(x, self.pwd_le.y() + margin + widget_h)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.setWindowTitle("")
    window.resize(500, 500)
    window.show()
    sys.exit(app.exec_())

你可能感兴趣的:(QT学习,qt)