1,添加一个按钮控件 : QPushButton
源代码如下:
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QCoreApplication
############################################################################################
# 建立窗体对象
class MainFrame(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 600, 400)
# self.resize(600, 400) # 设置窗体大小
self.setWindowTitle("我与PyQt5有个约会!") # 设置窗体标题
self.setWindowIcon(QIcon('myico.ico'))
qbtn = QPushButton('退出', self)
qbtn.clicked.connect(QCoreApplication.instance().quit)
qbtn.resize(70, 30)
qbtn.move(450, 350)
self.show() # 显示窗体
if __name__ == "__main__":
app = QApplication(sys.argv) # 建立application对象
mainframe = MainFrame()
sys.exit(app.exec())
我们来解析一下新增加的代码。
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtCore import QCoreApplication
因为需要增加一个按钮,所以我们引入了QPushButton类。同时我们还需要一个来自QtCore模块的对象,来实现按钮的具体功能。
qbtn = QPushButton('退出', self)
我们创建一个按钮。该按钮是QPushButton类的一个实例。构造函数的第一个参数是按钮的标签。第二个参数是父窗口小部件。父窗口小部件是示例窗口小部件,它是通过QWidget继承的。
qbtn.clicked.connect(QCoreApplication.instance().quit)
PyQt5中的事件处理系统采用信号和槽机制构建。 如果我们点击按钮,点击的信号被发出。 槽可以是Qt槽函数或任何Python可调用的函数。 QCoreApplication包含主事件循环; 它处理和调度所有事件。 instance()方法给我们当前的实例。
请注意,QCoreApplication是通过QApplication创建的。 点击的信号连接到终止应用程序的quit()方法。
通信在两个对象之间完成:发送方和接收方。 发送方是按钮,接收者是应用对象。
简单的来说就是按钮发出被单击的信号,连接到退出程序的方法。
信号和槽机制很重要,可以说是PyQt5图形界面编程中十分重要的概念,后面章节会单独讲解。
2,添加一个文本控件 : QLineEdit
先了解一下源代码:
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QLineEdit
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QCoreApplication
############################################################################################
# 建立窗体对象
class MainFrame(QWidget):
def __init__(self):
super().__init__()
self.qbtn = None
self.text = None
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 600, 400)
self.setWindowTitle("我与PyQt5有个约会!") # 设置窗体标题
self.setWindowIcon(QIcon('myico.ico'))
# 添加一个按钮 : QPushButton
self.qbtn = QPushButton('退出', self)
self.qbtn.clicked.connect(QCoreApplication.instance().quit)
self.qbtn.setGeometry(450, 350, 70, 30)
# 添加一个可控文本控件 :QLineEdit
self.text = QLineEdit('在这里输入数字', self)
self.text.selectAll()
self.text.setFocus()
self.text.setGeometry(80, 50, 150, 30)
self.show() # 显示窗体
if __name__ == "__main__":
app = QApplication(sys.argv) # 建立application对象
mainframe = MainFrame()
sys.exit(app.exec())
我们来解析一下新增加的代码。
from PyQt5.QtWidgets import QLineEdit
因为需要增加一个文本控件,所以我们引入了QLineEdit类。
self.qbtn = None
self.text = None
预定义成员变量,方便成员函数、其他模块调用。
# 添加一个可控文本控件 :QLineEdit
self.text = QLineEdit('在这里输入数字', self)
self.text.selectAll()
self.text.setFocus()
self.text.setGeometry(80, 50, 150, 30)
selectAll()方法则是可以理解为将“在这里输入数字”进行全选,方便输入数字,否则你还得手动全选删除默认字符。
setFocus()就是让焦点置于文本栏中,方便用户输入,不然还得手动在文本栏中单击一下,很是麻烦。
setGeometry()就是设置小部件的摆放坐标以及大小。
QLineEdit类是一个单行文本框控件;
常用方法:
定义输入掩码的字符,如下列出了输入掩码的占位符和字面字符 :
掩码实例如下 :
常见信号:
3,综合应用,制作一个简易版登陆界面。
制作一个建议登录界面,先预览一下GIF效果图:
上代码:
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QLabel, QMessageBox
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QCoreApplication
############################################################################################
# 建立窗体对象
class MainFrame(QWidget):
def __init__(self):
super().__init__()
self.qbtn = None
self.QLabelUserName = None
self.QLineEditUserName = None
self.QLabelUserPWD = None
self.QLineEditUserPWD = None
self.QPushButtonLogIn = None
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 600, 400)
self.setWindowTitle("我与PyQt5有个约会!") # 设置窗体标题
self.setWindowIcon(QIcon('myico.ico'))
# 添加一个按钮 : QPushButton
self.qbtn = QPushButton('退出', self)
self.qbtn.clicked.connect(QCoreApplication.instance().quit)
self.qbtn.setGeometry(450, 350, 70, 30)
# 添加一个静态文本控件 :QLabel,显示用户名
self.QLabelUserName = QLabel(self)
self.QLabelUserName.setGeometry(10, 50, 60, 30)
self.QLabelUserName.setText("用户名 : ")
# 添加一个可控文本控件 :QLineEdit,输入用户名
self.QLineEditUserName = QLineEdit('在这里输入用户名!', self)
self.QLineEditUserName.selectAll()
# 设置获取焦点
self.QLineEditUserName.setFocus()
self.QLineEditUserName.setGeometry(80, 50, 150, 30)
self.QLineEditUserName.setEchoMode(QLineEdit.Normal)
# 添加一个静态文本控件 :QLabel,显示密码
self.QLabelUserPWD = QLabel(self)
self.QLabelUserPWD.setGeometry(10, 90, 60, 30)
self.QLabelUserPWD.setText("密 码 : ")
# 添加一个可控文本控件 :QLineEdit
self.QLineEditUserPWD = QLineEdit('在这里输入密码!', self)
self.QLineEditUserPWD.setGeometry(80, 90, 150, 30)
self.QLineEditUserPWD.setEchoMode(QLineEdit.Password)
# 添加一个登录按钮
self.QPushButtonLogIn = QPushButton('登录', self)
self.QPushButtonLogIn.clicked.connect(self.log_in)
self.QPushButtonLogIn.setGeometry(50, 130, 70, 30)
self.show() # 显示窗体
def log_in(self):
if self.QLineEditUserName.text() and self.QLineEditUserPWD.text():
print("用户名 : {}, 密码 : {}" .format(self.QLineEditUserName.text(),
self.QLineEditUserPWD.text()))
QMessageBox.about(self, '登录提示', "用户名 : {}\n密 码 : {}" .format(self.QLineEditUserName.text(),
self.QLineEditUserPWD.text()))
self.QLineEditUserName.clear()
self.QLineEditUserName.setFocus()
self.QLineEditUserPWD.clear()
self.QLineEditUserPWD.setFocus()
else:
QMessageBox.about(self, '登录提示', '用户名或者密码不能为空!')
self.QLineEditUserName.clear()
self.QLineEditUserName.setFocus()
self.QLineEditUserPWD.clear()
self.QLineEditUserPWD.setFocus()
if __name__ == "__main__":
app = QApplication(sys.argv) # 建立application对象
mainframe = MainFrame()
sys.exit(app.exec())
今天就到这里,仔细阅读上面的代码,如有不明白的地方,可以@我。