文章目录
2、 输入控件(一)
2.1 纯键盘
2.1.1 QLineEdit
2.1.1.1 描述
其是一个单行文本编辑器,允许用户输入和编辑单行纯文本,自带一组编辑功能
2.1.1.2 控件创建
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
tx = QLineEdit("hello", w) # hello 为文本输入框的默认值 setText("hello)
tx.setText("你好呀!") # 设置文本内容
tx.insert("liuzhongkun") # 在光标处插入文本内容
print(tx.text()) # 获取真实文本内容
print(tx.displayText()) # 获取展示的文本内容,如密码框获取的是点,而不是具体内容
w.show()
sys.exit(app.exec_())
2.1.1.3 输出模式
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
te = QLineEdit(w)
te.setEchoMode(QLineEdit.NoEcho) # 不显示输出的内容
print(te.echoMode()) # 获取输出模式
btn = QPushButton("提交", w)
btn.move(0, 40)
btn.clicked.connect(lambda: te.setEchoMode(QLineEdit.Normal))
w.show()
sys.exit(app.exec_())
输出模式:
NoEcho = 1
:不输出Normal = 0
:正常输出Password = 2
:密文模式PasswordEchoOnEdit = 3
:编辑时明文,结束后密文
2.1.1.4 提示字符串
te.setPlaceholderText("这个提示语句") # 设置提示语句
print(te.placeholderText()) # 获得提示语句
在用户输入文本之前,给用户的提示语句
文本框为空,显示提示文本;反之,隐藏提示文本
2.1.1.5 清空按钮
setClearButtonEnable(bool) # 设置清空按钮
isClearButtonEnable() # 获取是否有清空按钮
2.1.1.6 添加操作行为
比如,添加密码框的小眼睛
addAction(QAction, QLineEdit.ActionPosition)
# QLineEdit.ActionPosition: QLineEdit.LeadingPosition 按前面 QLineEdit.trailingPosition 按后面
action.triggered.connect(fn)
addAction(QIcon, QLineEdit.ActionPosition) # 返回操作动作
2.1.1.7 自动补全
comp = QCompleter(iterator, parent) # 创建完成器
setCompleter(QCompleter) # 设置完成器
completer() # 获得完成器
2.1.1.8 输入限制
2.1.1.8.1 语法
-
内容长度限制
setMaxLength(int) # 设置限制输入的长度 maxLength() # 获取输入长度
-
只读限制
setReadOnly(bool) # 设置只读 isReadOnly() # 获取是否为只读
-
规则验证
setValidator(QValidator) # 设置验证器 setInputMask(mask_str) # 掩码验证 hasAcceptableInput() # 判定输入文本是否通过验证
2.1.1.8.2 掩码验证
-
含义:
- 掩码可以指定固定位置的固定数据类型,达到一个格式上的限制
- 例如ip地址:xxx: xxx: xxx: xxx
- 掩码由一串掩码字符和分隔符组成,分隔符可选分号和空白符等
-
掩码字符
输入字符 含义 A
ASCII字母字符是必须的,取值空间是A-Z,a-z a
ASCII 字母字符是允许的但不是必须的 N
ASCII字母字符是必须的. A-Z, a-z, 0-9 n
ASCII 字母字符是允许的但不是必须的 X
任何字符都可以,是必须需要的 x
任何字符都允许的,但不是必须需要的 9
ASCII 数字是必须要的. 0-9 0
ASCII 数字是允许的,但不是必须要的 D
ASCII 数字是必须要的. 1-9 d
ASCII 数字是允许的,但不是必须要的 (1-9) #
ASCII 数字是或加减符号允许的,但不是必须要的 H
十六进制数据字符是必须要的. A-F, a-f, 0-9 h
十六进制数据字符是允许的,但不是必须要的 B
二进制数据字符是必须要的. 0-1 b
二进制数据字符是允许的,但不是必须要的 >
所有的字符字母都是大写的 <
所有的字符字母都是小写的 !
关闭大小写 \
使用 \
去转义上面的字符,如果再需要显示上述字符的时候#!/usr/bin/env python # -*- coding: UTF-8 -*- # @author: kun from PyQt5.Qt import * import sys app = QApplication(sys.argv) w = QWidget() w.resize(500, 500) tx = QLineEdit(w) tx.move(100, 100) tx.setPlaceholderText("请输入ip地址") tx.setInputMask("999:999:999:999;*") # 设置掩码,另分隔符为 : 同时令空白字符为 * w.show() sys.exit(app.exec_())
2.1.1.9 案例:用户登录框
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import hashlib
class AccountTool:
# 将账号密码发送给服务器,验证账号密码的正确性,等待服务器返回结果
# 状态码
ACCOUNT_ERROR = -1
PWD_ERROR = 1
LOGIN_SUCCESS = 0
@staticmethod
def check_login(account, pwd):
if account != "kun":
return AccountTool.ACCOUNT_ERROR # 账户错误返回 -1
if pwd != '9fb144c4156ca8aa142b18f34e170a55':
return AccountTool.PWD_ERROR # 密码错误返回 1
return AccountTool.LOGIN_SUCCESS # 正确返回 0
@staticmethod
def encrypt_(pwd_encrypt):
# 对密码,使用 md5 加密
lis = ["我是md5加密", "我是md5二次加密"] # 加盐
for i in lis:
temp = hashlib.md5(i.encode("utf-8"))
temp.update(pwd_encrypt.encode("utf-8"))
pwd_encrypt = temp.hexdigest()
return pwd_encrypt
class Window(QWidget):
def __init__(self):
super().__init__()
self.Account = "kun"
self.Pwd = "123456"
self.setWindowTitle("登录界面") # 设置标题
self.resize(500, 500) # 设置窗口大小
self.move(100, 100) # 移动窗口
self.setMinimumSize(400, 400) # 限定窗口大小
self.setMaximumSize(1000, 1000)
self.setup_ui() # 调用创建控件的方法
def setup_ui(self): # 添加控件的操作
self.btn = QPushButton("登 录", self) # 创建登录按钮
self.btn.setEnabled(False)
self.btn.pressed.connect(self.login_)
self.acc = QLineEdit(self) # 创建账号输入框
self.acc.setPlaceholderText("请输入您的用户名")
self.acc.textChanged.connect(self.btn_) # 当文本框内容改变时,修改按钮状态
self.acc.setClearButtonEnabled(True)
self.pwd = QLineEdit(self) # 创建密码输入框
self.pwd.setPlaceholderText("请输入您的密码")
self.pwd.setEchoMode(QLineEdit.Password) # 不显示密码
self.pwd.textChanged.connect(self.btn_)
self.pwd.setClearButtonEnabled(True)
# 创建动作
self.action = QAction(self.pwd)
self.action.setIcon(QIcon("./close.jpg"))
self.action.triggered.connect(self.change_)
self.label_acc = QLabel(self)
self.label_acc.setVisible(False)
self.label_pwd = QLabel(self)
self.label_pwd.setVisible(False)
def change_(self):
if self.pwd.echoMode() == QLineEdit.Password:
self.action.setIcon(QIcon("./open.jpg"))
self.pwd.setEchoMode(QLineEdit.Normal)
else:
self.action.setIcon(QIcon("./close.jpg"))
self.pwd.setEchoMode(QLineEdit.Password)
def btn_(self):
self.btn.setEnabled(len(self.pwd.text