专栏名称: 生信菜鸟团
生信菜鸟团荣誉归来,让所有想分析生物信息学数据的小伙伴找到归属,你值得拥有!
目录
相关文章推荐
生物学霸  ·  中国医学科学院/北京协和医学院 ... ·  昨天  
生物探索  ·  Cell | ... ·  4 天前  
BioArt  ·  Nat Commun | ... ·  3 天前  
51好读  ›  专栏  ›  生信菜鸟团

从零开始用 PyQt5 写一个 scihub 下载器(一)

生信菜鸟团  · 公众号  · 生物  · 2020-10-25 23:15

正文

PyQt 是一个创建 GUI 应用程序的工具包,是 Python 和 Qt 的结合体,可以用 Python 编写跨平台(包括 UNIX,Windows 和 Mac)的 GUI 应用程序。结合自带的 Qt Designer 可视化工具进行界面设计,我们可以非常快速地开发出一款功能强大、界面美观的 GUI 应用程序。

在这个例子中我们将从零开始用用 PyQt5 写一个界面化的 scihub 下载器,先来预览一下成品(监听黏贴板 --> 识别 DOI --> 下载文章 --> 根据文章题目重命名 --> 弹出消息框):

完成的步骤包含以下四部分,在本文中我们将介绍前两个部分,即设计 UI:

1. 用 Qt Designer 设计界面,生成 .ui 格式的界面 2. pyuic5 .ui 转为 .py 3. 构建主程序 4. 打包 .py 为可执行文件

1. 环境准备

安装 PyQt5

pip3 install PyQt5

安装 PyQt5-tools

pip3 install pyqt5-tools

安装 pyuic5-tool

pip3 install pyuic5-tool

2. 设计 UI

打开 Qt Designer (在 Anaconda 的 bin 目录下),Qt Designer 是一个非常强大的 GUI 设计工具,有了它我们就可以在程序设计中更快地开发设计出程序界面,避免了用纯代码来写一个窗口的繁琐,同时 PyQt 也支持界面与逻辑分离。Qt Designer 生成的文件格式为: .ui

打开 Qt Designer 可见到如下界面,主要分为四个区域: 项目区 控件区 编辑区 属性区

Qt Designer 使用起来非常简单, 编辑区 显示了软件的主要界面,我们只需将所需的控件从 控件区 拖入编辑区即可添加控件,接着我们可以在 属性区 调整这些控件的属性, 项目区 则用于显示控件之间的层级关系。

首先,我们需要新建窗口,点击右上角的新建图标:

选择 QVGA 纵向:

现在编辑区即创建了一个空白的窗口:

在本文的例子中我们需要添加三个控件:

QLabel :标签,该标签可以放纯文本,链接或者富文本信息。

QTextEdit :多行文本框,可以显示多行文本内容,当文本内容超出控件显示范围时,可显示滚动条, Qtextedit 不仅可以用来显示文本还可以用来显示 HTML 文档。

QPushButton :命令按钮,按下(或者单击)按钮以命令脚本执行某个操作。

将这三个控件分别从 控件区 分别拖入 编辑区 后,用鼠标框选这三个控件,右键选择垂直布局,这样即使我们调整窗口的大小,这三个控件的相对位置保持不变。

拖动边缘调整至合适大小:

添加了所有控件之后,下一步便是分别设置控件的属性,进一步调整控件。在这个例子中,我们的任务是更改 QLabel QPushButton 的默认文本并加粗字体,同时还需将 QLabel 居中。

双击 TextLabel 编辑 QLabel 的文本为 请输入 DOI ,接着在属性框,font 选择粗体。

alignment 水平选择居中:

同样,双击 PushButton 编辑按钮文本为 Download

至此我们已完成了所有界面设计:

点击右上角的保存图标另存为:

使用 UI Designer 设计好窗体并保存为文件 scihub_ui.ui 后,要在 Python 里使用这个窗体,需要将 .ui 转换为 python 格式,这里将借助 pyuic5 工具,在命令行中输入:

pyuic5 -o scihub_ui.py scihub_ui.ui

转换成功后,打开 scihub_ui.py 文件,我们可以简单看一下这个脚本里的内容,代码里首先 import 了 PyQt5 相关库,并定义了名为 Ui_MainWindow class ,这个 class 主要包含两个函数 setupUi() retranslateUi() setupUi() 用于窗体的初始化,初始化了各个控件成员 self.xx ,这与我们在 Qt Designer 里添加的控件是一一对应的。 retranslateUi() 设置了窗体的标题、标签的文字、按钮的标题。

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'scihub_ui.ui'## Created by: PyQt5 UI code generator 5.12.3## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):    def setupUi(self, MainWindow):        MainWindow.setObjectName("MainWindow")        MainWindow.resize(240, 320)        self.centralwidget = QtWidgets.QWidget(MainWindow)        self.centralwidget.setObjectName("centralwidget")        self.widget = QtWidgets.QWidget(self.centralwidget)        self.widget.setGeometry(QtCore.QRect(10, 10, 211, 251))        self.widget.setObjectName("widget")        self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)        self.verticalLayout.setContentsMargins(0, 0, 0, 0)        self.verticalLayout.setObjectName("verticalLayout")        self.label = QtWidgets.QLabel(self.widget)        font = QtGui.QFont()        font.setBold(True)        font.setWeight(75)        self.label.setFont(font)        self.label.setAlignment(QtCore.Qt.AlignCenter)        self.label.setObjectName("label")        self.verticalLayout.addWidget(self.label)        self.textEdit = QtWidgets.QTextEdit(self.widget)        self.textEdit.setObjectName("textEdit")        self.verticalLayout.addWidget(self.textEdit)        self






请到「今天看啥」查看全文