• 项目编程基本流程
  1. 创建项目

选择Create New Project,输入项目名称TemplatePrint,见下图,注意要Base interepter要选择系统中的python,并勾选Inherit global site-pakages和Make available to all projects。不勾选Inherit global site-pakages的话,有时系统会出现找不到pyQT5库的现象。然后按Create创建pycharm项目。

qt 嵌套 python 界面 qtcreator python_python3

  1. 使用designer设计界面文件

项目创建完毕后,我们首先要设计主窗口界面,pycharm菜单栏 > tools > external tools >QT> QtDesignerr ,打开PyQt5的Qt Designer,会自动弹出新建窗体new form对话框,。在窗体模板中选择Main Window。新建的MainWindow窗口是一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。见下图:

qt 嵌套 python 界面 qtcreator python_pycharm_02

QTDesigner主窗口界面如下:

qt 嵌套 python 界面 qtcreator python_qt 嵌套 python 界面_03

建立的窗口可以按住右下角,拖动改变窗口大小,设计时从左边Widget Box中将所需控件拖到窗口中。比如:先拖一个Label、一个PushButton到窗口中,控件属性可在对象属性窗口中修改,部分属性也可在鼠标右键菜单中修改。在控件上右键选择“change plain text”可修改控件显示文本,我们将Label文本改成“Hello World!”,按钮文本改成“OK”。在控件上右键选择“change objectName”可修改控件名称,我们将按钮名称改为“btnOK”。如下图:

qt 嵌套 python 界面 qtcreator python_pyqt5_04

接下来添加按钮事件处理。在Qt中对象间通讯使用信号(Signal)和槽(Slot),这是编程中对象间通讯的机制,是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。Signal/SlotEditor默认在QtDesigner界面右下角,点击”+”,添加一条Signal/Slot,Sender选择btnOK,Signal选择clicked(),Receiver选择MainWindow,slot选择close(),这条记录意思就是:点击btnOK,发送一个clicked信号给MainWindow,MainWindow执行窗口的close()函数关闭窗口。

qt 嵌套 python 界面 qtcreator python_qt 嵌套 python 界面_05

点击菜单Form——>Preview...,预览结果,点击OK按钮关闭预览窗口。

本项目正式的主窗口界面如下图,将本窗口设计保存到项目文件夹下,命名为:MainWindow.ui。

qt 嵌套 python 界面 qtcreator python_qt 嵌套 python 界面_06

  1. 界面与逻辑分离

界面文件在pyQT中有多种使用方式,可以直接在py代码中加载ui文件,也可以编译成py文件后再调用,如何使用可根据项目需要选择。

窗口界面设计完成后,回到pycharm,在项目下找到MainWindow.ui,鼠标右击,选择QT——>pyuic5,将ui文件编译成py文件,在本项目中产生的文件名为:Ui_MainWindow.py。

我们可以在编译好的py文件中直接编写业务逻辑代码,不过这样的话,界面和逻辑开发就混合在一起了,每一次的ui更新都会伴随着转换后py文件的槽函数的添加修改,及其不方便,造成效率低下。解决办法是利用继承实现界面和业务逻辑的分离,本例就来介绍如何将二者剥离。

在项目上右键,选择New——>Python File,创建一个名为TemplatePrint.py的文件,在文件中添加如下代码:

# -*- coding: utf-8 -*-
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
Import sys
from Ui_MainWindow import Ui_MainWindow   # 主窗口
class MainWindow(QMainWindow,Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec_())

MainWindow类继承了QMainWindow和Ui_MainWindow,业务逻辑代码应该放在MainWindow类中。在MainWindow类的初始化函数中,首先调用父类QMainWindow的初始化函数进行初始化,然后再通过调用Ui_MainWindow中的setupUi函数来完成窗体界面的初始化工作。实际上这已经将界面与业务逻辑分离开了,因为界面的初始化代码Ui_MainWindow是作为模块导入到MainWindow中的。如果界面发生改动,只需要通过pyuic5命令重新生成Ui_MainWindow.py文件,TemplatePrint.py文件不需要做改动。

  1. 运行测试

在项目的TemplatePrint.py上右键选择”运行TemplatePrint”,可以看到项目被运行起来了。对复杂的项目,pycharm提供了项目运行配置方案。在菜单上选择Run——>Edit configurations,按“+”添加一个配置,命名为TemplatePrint,如下图:

qt 嵌套 python 界面 qtcreator python_print_07

配置完成后,在菜单Run——>Run‘TemplatePrint’,可直接运行测试。