Python中利用PyQt5做界面开发

一、PyQt5的环境配置
1、安装PyQt5
第一,也是最简单的方法,下载预编译版本的pyqt,这是一个exe文件,直接运行安装程序即可(安装过程中会提示选择python的安装目录).要注意的是,下载的预编译pyqt安装包的位数版本一定要与本机python的位数和版本保持一致. 安装包可以在sourceforge上找到,在sourceforge官网搜索pyqt即可.
附上一个下载链接:
PyQt5-5.6-gpl-Py3.5-Qt5.6.0-x32-2.exe: Download PyQt from SourceForge.net
第二,使用pip直接安装.
python3.x : pip3 install PyQt5
python2.7x: pip install PyQt5
此外,安装PyQt5要注意两点:
一、PyQt5的环境变量配置
二、PyQt5的版本要与本地python的版本保持一致。
2、QtDesigner安装
QtDesigner简单介绍
Qtdesigner是Python设计里面一个非常实用的工具,使得人们编写qt界面可以不仅仅是使用纯代码,而可以在可视化的基础上设置,非常方便。用户安装PyQt5后,系统会默认安装QtDesigner工具。
QtDesigner的默认默认路径: C:\python\python\Lib\site-packages\PyQt5\designer.exe
a、安装PyQt5-tools
Python环境需要安装designer。 在终端执行pip命令安装完PyQt5-tools。
b、配置PyCharm
打开Pycharm,然后按照下面路径打开Extrernal Tools:
File->Tools->Extrernal Tools->点击“+”号->弹出对话框,配置如下:
(1).增加QT设计界面“Qt Designer” —— 这个就是设计Qt界面的工具
Program选择PyQt安装目录中 designer.exe 的路径
Work directory 使用变量 ProjectFileDirProjectFileDir (点击后面的…)
[图片上传失败…(image-e81206-1526303573660)]
(2).增加“PyUIC” ——这个主要是用来将 Qt界面 转换成 py代码
Program选择PyQt安装目录中 pyuic5.bat 的路径
parameters设置为FileNameFileName -o FileNameWithoutExtensionFileNameWithoutExtension.py
Work directory 设置为 ProjectFileDirProjectFileDir (点击后面的…)
配置完成后可以在tools里面看到我们的工具
在这里插入图片描述
二、PyQt的使用。
**

第一步,界面的编写

**

  1. 打开Pycharm的界面设计工具QTDsigner
    Pycharm->Tools->External Tools->QTDesigner
    在这里插入图片描述
  2. 创建界面,选择Wdiget
    在这里插入图片描述
  3. 分别在窗口添加如下控件,Lable、pushButton、checkBox、lineEdit如图所示:
    在这里插入图片描述
  4. 做好布局后,把文件保存到我们的项目目录下
    5.
  5. 把.ui文件转换成.py文件,右键.ui使用PyUIC工具把.ui文件转换成.py文件
    6.
    生成的.py文件
    在这里插入图片描述
  6. 测试我们的.py文件:在我们的login.py文件下面添加
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    ui = LoginUi()
    ui.show()
    sys.exit(app.exec_())

现在,运行login.py。就可以看到登录界面了。
顺便在此贴出界面编写生成的代码,可以直接粘贴此代码运行弹出界面。

from PyQt5 import QtWidgets
import sys


class LoginUi(QtWidgets.QDialog):
    def __init__(self):
        super(LoginUi, self).__init__()
        self.label_user = QtWidgets.QLabel()
        self.label_password = QtWidgets.QLabel()
        self.lineEdit_user = QtWidgets.QLineEdit()
        self.lineEdit_password = QtWidgets.QLineEdit()
        self.pussButton_signin = QtWidgets.QPushButton()
        self.pussButton_signup = QtWidgets.QPushButton()

        self.h_layout_user = QtWidgets.QHBoxLayout()
        self.h_layout_password = QtWidgets.QHBoxLayout()
        self.h_layout_button = QtWidgets.QHBoxLayout()
        self.v_layout_all = QtWidgets.QVBoxLayout()

        self.h_layout_user.addWidget(self.label_user)
        self.h_layout_user.addWidget(self.lineEdit_user)
        self.h_layout_password.addWidget(self.label_password)
        self.h_layout_password.addWidget(self.lineEdit_password)
        self.h_layout_button.addWidget(self.pussButton_signin)
        self.h_layout_button.addWidget(self.pussButton_signup)
        self.v_layout_all.addLayout(self.h_layout_user)
        self.v_layout_all.addLayout(self.h_layout_password)
        self.v_layout_all.addLayout(self.h_layout_button)

        self.setLayout(self.v_layout_all)

        self.setWindowTitle("登陆界面")
        self.label_user.setText("用户名:")
        self.label_password.setText("   密码:")
        self.pussButton_signin.setText("登陆")
        self.pussButton_signup.setText("注册")


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    ui = LoginUi()
    ui.show()
    sys.exit(app.exec_())

**

第二步,逻辑的编写

**
在做好界面以后,如何让界面运行起来,这就需要我们编写界面的逻辑代码,实现各个组件、控件的功能。
我在这里实现的是一个数据库的加密登录界面,事先生成一个sqlite数据库,然后在编写逻辑代码中使用。
在此贴出整个逻辑代码。

from login_ui import LoginUi
from PyQt5 import QtWidgets
import sys
import sqlite3
import hashlib
import time

# 继承界面
class LoginLogic(LoginUi):
    def __init__(self):
        super(LoginLogic, self).__init__()
        self.conn = sqlite3.connect("user.db")  # 使用其他数据库的话此处和import模块需要修改

        # 此处改变密码输入框lineEdit_password的属性,使其不现实密码
        self.lineEdit_password.setEchoMode(QtWidgets.QLineEdit.Password)

        # qt的信号槽机制,连接按钮的点击事件和相应的方法
        self.pussButton_signin.clicked.connect(lambda: self.sign_in())
        self.pussButton_signup.clicked.connect(lambda: self.sign_up())

    @staticmethod
    def hash(src):
        """
        哈希md5加密方法
        :param src: 字符串str
        :return:
        """
        src = (src + "请使用私钥加密").encode("utf-8")
        m = hashlib.md5()
        m.update(src)
        return m.hexdigest()

    def sign_in(self):
        """
        登陆方法
        :return:
        """
        c_sqlite = self.conn.cursor()
        user_name = self.lineEdit_user.text()
        user_password = self.lineEdit_password.text()
        if user_name == "" or user_password == "":
            self.lineEdit_user.setText("请输入用户名和密码")
        else:
            c_sqlite.execute("""SELECT password FROM user WHERE name = ?""", (user_name,))
            password = c_sqlite.fetchall()
            if not password:
                self.lineEdit_user.setText("此用户未注册")
            else:
                if self.hash(user_password) == password[0][0]:
                    self.lineEdit_user.setText("登陆成功")
                    time.sleep(1)
                    self.open_main_window()
                    self.close()
                else:
                    self.lineEdit_user.setText("密码不正确")

    def sign_up(self):
        """
        注册方法
        :return:
        """
        c_sqlite = self.conn.cursor()
        user_name = self.lineEdit_user.text()
        user_password = self.lineEdit_password.text()
        if user_name == "" or user_password == "":
            self.lineEdit_user.setText("请输入用户名和密码")
        else:
            user_password = self.hash(user_password)
            c_sqlite.execute("""SELECT password FROM user WHERE name = ?""", (user_name,))
            if not c_sqlite.fetchall():
                c_sqlite.execute("""INSERT INTO user VALUES (NULL ,?,?)""", (user_name, user_password))
                self.conn.commit()
                self.lineEdit_user.setText("注册成功")
            else:
                self.lineEdit_user.setText("用户名重复")

    def open_main_window(self):
        """
        此处添加打开另一个窗口的程序
        :return:
        """
        下方注释的代码根据自己的情况更改
        # ui = Ui_Dialog()
        # ui.show()
        print("打开另一个窗口")


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    ui = LoginLogic()
    ui.show()
    sys.exit(app.exec_())

直接运行逻辑代码,既可看到登陆界面:
在这里插入图片描述

至此,就完成了整个利用PyQt做界面开发的设计实现,登录界面功能还不够完善,后续可自己进行添加完善。

本片博客借鉴引用了他人的博客内容,在此表示感谢。并附上链接如下
https://blog.csdn.net/shuduaa/article/details/80423650
https://blog.csdn.net/u012520551/article/details/72608897
https://blog.csdn.net/u010139869/article/details/79503619

猜你喜欢

转载自blog.csdn.net/zbb297918657/article/details/86480404