一、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里面看到我们的工具

python可以开发cs架构项目吗 python可以开发界面吗_用户名

二、PyQt的使用。

**

第一步,界面的编写

**

打开Pycharm的界面设计工具QTDsigner

Pycharm->Tools->External Tools->QTDesigner

python可以开发cs架构项目吗 python可以开发界面吗_python可以开发cs架构项目吗_02

创建界面,选择Wdiget

python可以开发cs架构项目吗 python可以开发界面吗_用户名_03

分别在窗口添加如下控件,Lable、pushButton、checkBox、lineEdit如图所示:

python可以开发cs架构项目吗 python可以开发界面吗_python_04

做好布局后,把文件保存到我们的项目目录下

python可以开发cs架构项目吗 python可以开发界面吗_sqlite_05

把.ui文件转换成.py文件,右键.ui使用PyUIC工具把.ui文件转换成.py文件

python可以开发cs架构项目吗 python可以开发界面吗_sqlite_06

生成的.py文件

python可以开发cs架构项目吗 python可以开发界面吗_用户名_07

测试我们的.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_())

直接运行逻辑代码,既可看到登陆界面:

python可以开发cs架构项目吗 python可以开发界面吗_用户名_08

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