学习计划
可用信号
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("文本边框边距设定测试")
window.resize(500, 500)
le = QLineEdit(window)
le.move(100, 100)
le.resize(300, 300)
#用户编辑的时候两个信号返回的值一样
#使用代码对内容进行编辑时,只有内容变化的信号执行
le.textEdited.connect(lambda val: print("文本框编辑的时候", val))
le.textChanged.connect(lambda val: print("文本框内容发生改变", val))
#回车被按下时触发
le.returnPressed.connect(lambda :print("回车键被按下"))
#结束编辑时触发
le.editingFinished.connect(lambda :print("结束编辑"))
#光标位置发生变化时触发(用得少),显示老光标和新光标位置
le.cursorPositionChanged.connect(lambda old_Pos, new_Pos: print(old_Pos, new_Pos))
#选中内容时触发(用得少)
le.selectionChanged.connect(lambda : print("选中文本发生改变", le.selectedText()))
# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())
功能作用
1.控件创建
应用场景
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
le_a = QLineEdit(window)
le_a.move(100, 200)
le_b = QLineEdit("文本框",window)
le_b.move(100, 300)
# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())
2.文本的设置和获取
应用场景
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("QLineEdit功能测试")
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.setText("复制")
copy_btn.move(100, 400)
def copy_cao():
# 1. 获取文本框a, 真实内容
content = le_a.text()
# 2. 把上面获取到的内容, 设置到文本框B里面
#方法1
le_b.setText(content)
#方法2
le_b.setText("")#清空
le_b.insert(content)
copy_btn.clicked.connect(copy_cao)
# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())
3.输出模式(主要就是密码密文操作)
应用场景
- api测试
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("QLineEdit功能测试")
window.resize(500, 500)
le_b = QLineEdit(window)
le_b.move(100, 300)
#设置输出模式
# NoEcho = 1 不输出,但是确实输入了
# Normal = 0 正常输出
# Password = 2 密文形式
# PasswordEchoOnEdit = 3 编辑时明文,结束后密文
le_b.setEchoMode(QLineEdit.PasswordEchoOnEdit)
print("le_b的输出模式为:",le_b.echoMode())
copy_btn = QPushButton(window)
copy_btn.setText("输出")
copy_btn.move(100, 400)
def print_cao():
print("真实文本:",le_b.text())
print("用户看到的文本:",le_b.displayText())
copy_btn.clicked.connect(print_cao)
# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())
- 案例
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys
class AccountTool:
ACCOUNT_ERROR = 1
PWD_ERROR = 2
SUCCESS = 3
def check_login(account,pwd):
if account != "sz":
return AccountTool.ACCOUNT_ERROR
if pwd != "itlike":
return AccountTool.PWD_ERROR
return AccountTool.SUCCESS
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("登录案例学习")
self.resize(500,500)
#设置窗口最小尺寸
self.setMinimumSize(350,350)
self.setup_ui()
def setup_ui(self):
#添加三个控件
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)
#占位文本提示
self.account_le.setPlaceholderText("请输入账号")
self.pwd_le.setPlaceholderText("请输入密码")
#设置密码文本框显示清空按钮
self.pwd_le.setClearButtonEnabled(True)
#添加自定义行为操作(明文和密文的切换)
action = QAction(self.pwd_le)
action.setIcon(QIcon("close.png"))
def change():
#判断当前文本输出状态,方便进行转换操作
if self.pwd_le.echoMode() == QLineEdit.Normal:
self.pwd_le.setEchoMode(QLineEdit.Password)
#切换小眼睛为关闭图标
action.setIcon(QIcon("close.png"))
else:
self.pwd_le.setEchoMode(QLineEdit.Normal)
#切换小眼睛为打开图标
action.setIcon(QIcon("open.png"))
action.triggered.connect(change)
#设置图标设在尾部
self.pwd_le.addAction(action,QLineEdit.TrailingPosition)
#设置自动补全完成器
completer = QCompleter(["sz","shunzi","wangzha"],self.account_le)
self.account_le.setCompleter(completer)
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.pwd_le.setText("")
self.account_le.setFocus()
return None
if state == AccountTool.PWD_ERROR:
print("密码错误")
self.pwd_le.setText("")
self.pwd_le.setFocus()
return None
if state == AccountTool.SUCCESS:
print("登录成功")
#*****本地验证方法***********
# if account == "sz":
# if pwd == "itlike":
# print("登录成功")
# else:
# print("密码错误")
# self.pwd_le.setText("")
# #重新获取焦点在密码上
# self.pwd_le.setFocus()
# else:
# print("账号错误")
# self.account_le.setText("")
# self.pwd_le.setText("")
# #获取焦点在账号上
# self.account_le.setFocus()
def resizeEvent(self,QResizeEvent):
widget_w = 150
widget_h = 40
#调整控件尺寸
self.account_le.resize(widget_w,widget_h)
self.pwd_le.resize(widget_w,widget_h)
self.login_btn.resize(widget_w,widget_h)
#调整控件位置
x = (self.width() - widget_w)/2
self.account_le.move(x,self.height()/5)
self.pwd_le.move(x,self.account_le.y() + widget_h+60)
self.login_btn.move(x,self.pwd_le.y() + widget_h+60)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
4.占位提示字符串(3中有演示)
应用场景
#占位文本提示
self.account_le.setPlaceholderText("请输入账号")
self.pwd_le.setPlaceholderText("请输入密码")
5.清空按钮显示(3中有演示)
应用场景
#设置密码文本框显示清空按钮
self.pwd_le.setClearButtonEnabled(True)
6.添加自定义操作行为(3中有演示)
应用场景
#添加自定义行为操作(明文和密文的切换)
action = QAction(self.pwd_le)
action.setIcon(QIcon("close.png"))
def change():
#判断当前文本输出状态,方便进行转换操作
if self.pwd_le.echoMode() == QLineEdit.Normal:
self.pwd_le.setEchoMode(QLineEdit.Password)
#切换小眼睛为关闭图标
action.setIcon(QIcon("close.png"))
else:
self.pwd_le.setEchoMode(QLineEdit.Normal)
#切换小眼睛为打开图标
action.setIcon(QIcon("open.png"))
action.triggered.connect(change)
#设置图标设在尾部
self.pwd_le.addAction(action,QLineEdit.TrailingPosition)
7.自动补全(3中有演示)
应用场景
#设置自动补全完成器
completer = QCompleter(["sz","shunzi","wangzha"],self.account_le)
self.account_le.setCompleter(completer)
8.输入限制(验证器验证没整理,感觉太复杂)
应用场景
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
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.setText("复制")
copy_btn.move(100, 400)
# 最大长度限制
le_a.setMaxLength(3)
print(le_a.maxLength())
# #设置文本框只读
le_a.setText("王炸, 要不起!")
le_a.setReadOnly(True)
# le_b 设置掩码
# 总共输入5 位 左边 2(必须是大写字母) - 右边 2(必须是一个数字)
le_b.setInputMask(">AA-99;#")
#设置输入全部为数字,且按照固定的格式
le_b.setInputMask("9999-9999999;0")
# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())
9.识别文本是否被修改
应用场景
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("文本是否修改测试")
window.resize(500, 500)
le_b = QLineEdit(window)
le_b.move(100, 300)
copy_btn = QPushButton(window)
copy_btn.setText("测试")
copy_btn.move(100, 400)
def copy_cao():
#打印密码框内容是否是被修改状态
print(le_b.isModified())
le_b.setModified(False)
copy_btn.clicked.connect(copy_cao)
# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())
10.光标控制(没整理,感觉没啥用,需要的时候再说吧)
11.文本边距设置
应用场景
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("文本边框边距设定测试")
window.resize(500, 500)
le = QLineEdit(window)
le.move(100, 100)
le.resize(300, 300)
#设定一个背景,便于观察
le.setStyleSheet("background-color: cyan;")
#QWidget方法,左边少了100,不是我们想要的效果
le.setContentsMargins(100, 0, 0, 0)
#setTextMargins(int left,int top,int right,int bottom)
le.setTextMargins(100, 0, 0, 0)
#设置对齐方式
le.setAlignment(Qt.AlignRight | Qt.AlignBottom)
# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())
12.对齐方式(11中有演示)
应用场景
#按位或 | 代表相加的作用
le.setAlignment(Qt.AlignRight | Qt.AlignBottom)
13.常用编辑功能(大部分功能,文本框右击标准菜单都已实现)(不演示了,直接:控件.方法名() 这样使用即可)