一、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:pythonpythonLibsite-packagesPyQt5designer.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的使用。
**
第一步,界面的编写
**
打开Pycharm的界面设计工具QTDsigner
Pycharm->Tools->External Tools->QTDesigner
创建界面,选择Wdiget
分别在窗口添加如下控件,Lable、pushButton、checkBox、lineEdit如图所示:
做好布局后,把文件保存到我们的项目目录下
把.ui文件转换成.py文件,右键.ui使用PyUIC工具把.ui文件转换成.py文件
生成的.py文件
测试我们的.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做界面开发的设计实现,登录界面功能还不够完善,后续可自己进行添加完善。