EasyTranslator 开发过程总结(一)
前言
学 Python 爬虫有一段时间了,为了检验学习成果,熟悉 Python 编程,想自己动手开发一个小软件。于是从最简单的翻译软件入手,通过爬虫,调用各个翻译接口,并将各个翻译结果呈现在一起,用户可以加以对比整合,提高工作效率。于是便开始了我的小项目。
运行效果如上图所示,该软件支持中英互译,自动检测语言,聚合 Google、百度、必应、金山、有道、cnki 翻译助手六个翻译接口。
虽然,这个项目听起来挺简单的,但是我在开发的过程中用到了不少编程知识,遇到了不少问题。这篇文章将总结一下我的收获,可能有些东西理解的比较肤浅,只知其然不知其所以然,还需要进一步理解。
这个项目用到的知识有:python 基础语法、requests 包用法、BeautifulSoup 用法、Python 正则表达式用法、PyQt5 配置和使用、PyInstaller 打包应用程序,Qt 多线程与消息循环的理解、qss语法、异常处理等。
文章的介绍顺序将按照我的开发的步骤进行。本文主要介绍开发环境的准备,以及如何在 pycharm 中使用 qt designer 进行界面设计。
1 开发环境准备
1.1 Python 版本和相关的包
Python 版本:Python 3.6.4 :: Anaconda, Inc
requests (2.18.4)
PyQt5 (5.11.2)
PyQt5-tools (5.9.0.1.2)
beautifulsoup4 (4.6.0)
PyInstaller (3.3.1)
Pywin32 (222)
1.2 IDE
IDE : PyCharm 2018.1.4 x64
1.3 PyCharm 外部工具配置
配置 PyCharm 外部工具主要用于使用 PyQt5-tools 中的 designer.exe 进行界面设计,并将界面文件转换成 Python 代码。主要添加配置两个工具。
File -> Settings -> Tools -> External Tools -> 点击 “+” 号创建,
工具1配置详情
Name: QtDesigner(随便)
Program: D:\ProgramData\Anaconda3\Lib\site-packages\pyqt5-tools\designer.exe(根据自己的 pyqt5-tools 安装路径)
Working directory: $FileDir$
工具2配置详情
Name: PyUIC
Program: D:\ProgramData\Anaconda3\python.exe
Argument: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
Working directory: $FileDir$
工具配置完成后可以在 pycharm 菜单栏 Tools -> External Tools 找到,或者在左侧工程目录中选中 .ui 文件(界面文件)右键 -> External Tools 找到。QtDesigner 用于在 pycharm 中唤起 qt designer,PyUIC 用于将 .ui 文件转换成 Python代码(与 qt creator类似)。
2 测试 pyqt5 以及外部工具的使用
在 pycharm 中新建 Python 工程,Tools -> External Tools -> QtDesigner,打开 qt designer,简单拖几个控件后保存,会发现在当前工程目录下多了一个 .ui 文件,在 pycharm 的工程目录中右键该文件 -> External Tools ->PyUIC,会生成对应的 .py 文件。
自动生成的 Ui_window.py 的代码如下:
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(608, 477)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(150, 210, 75, 23))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(360, 210, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(240, 90, 113, 20))
self.lineEdit.setObjectName("lineEdit")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 608, 17))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
self.pushButton_2.setText(_translate("MainWindow", "PushButton"))
新建 Python 文件 demo.py,添加如下代码:
# -*- coding: utf-8 -*-
from Ui_window import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow, QApplication
import sys
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.fun)
def fun(self):
self.ui.lineEdit.setText('button')
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
测试效果:
说明 PyQt5 配置和相关工具配置成功。