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是用户输入过程可以看到文本内容,完成之后则显示为密文
3、案例:文本输出模式登录案例
将局部变量保存到属性中,在所有方法中该属性都可以使用(添加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_())