我与PyQt5有个约会系列教程(3):学习按钮控件QPushButton以及文本控件QLineEdit的应用

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())

今天就到这里,仔细阅读上面的代码,如有不明白的地方,可以@我。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值