文章目录

前言

实现步骤:实例演示

1 创建一个eric项目文件

2. 创建窗体UI文件

3. 项目中添加文件

4. 编译UI文件。

5. 关联信号与槽函数

第1种方式,直接添加槽函数并与信号绑定

第2种方式,逻辑与界面分离

总结


前言

首先声明,我是一妥妥的新手,非科班,完成自学。新手上路,各种踩坑。

之前因为项目需要用Qt Designer设计窗体UI文件,然后用内置的工具编译成py文件,出现UI文件修改的时候,重新编译以后每次都需要手动添加之前的代码。

网上看了很多大神的教程,学过一遍不用过一段时间又忘掉,虽然是重复造轮子,但是自己写一遍还是印象深刻。这次写这个教程算是给自己留个脚印,也可供其他新手参考。


实现步骤:实例演示

1. 创建一个eric项目文件

新建一个项目文件夹,example(E:\Python Project\example)

打开Eric6, 工具栏:project→New,出现以下窗体:项目名称命名example

                备注:这里通过Pycharm,Tool→External Tools→Eric6

     

项目新建完成后,会在对应目录下生成如下三个文件。

2. 创建窗体UI文件

用QtDesign设计一个窗体UI文件,test.ui,存放在example目录下。

创建一个TextBrowser和两个按钮控件,如下图:

3. 项目中添加文件

在创建的Eric项目(项目文件example.e4p)下添加test.ui文件。工具栏:project→Add Files,选择资源文件,Source Files

添加完成后,会在资源目录下看到test.ui文件

  

4. 编译UI文件。

资源文件目录下生成一个Ui_test.py文件

用pycharm运行Ui_test.py文件,即可打开窗体。

至此,UI窗体创建和编译已经完成。

5. 关联信号与槽函数

这里有两种实现方式:

第1种方式,直接添加槽函数并与信号绑定

直接在Ui_test.py文件中编写槽函数,并关联信号与槽函数。

编写槽函数:showMsg,代码如下

def showMsg(self):print('您点击了按钮1.')

关联信号与槽函数:单击按钮1,触发槽函数showMsg,代码如下

self.pushButton.clicked.connect(self.showMsg)

问题来了!!! 

采用这种方法,如果需要对UI文件(test.ui)进行修改,比如添加或者删除一些控件,用Eric重新编译以后,刚刚在Ui_test.py中添加的部分代码就被覆盖掉了。此时,局限性就体现出来了。

第2种方式,逻辑与界面分离

生成一个新的类文件,继承Ui_test.py。

操作方法:打开Eric6,选中test.ui文件,右键,Generate Dialog Code...,在打开的对话框中点击‘New...’,在弹出的对话框‘New Dialog Class’中可以修改新建的类名和文件名,这里默认。具体参考一下截图:

此时,在Eric项目下生成了一个test.py文件,文件中生成了一个新类,testWin,继承了Ui_test。

但是,test.py文件中没有入口函数,需要手动添加。用Pycharm打开test.py文件,并修改和添加代码如下:

注意,需要对test.py中部分代码进行修改,import QApplication,from .Ui_test import Ui_testWin 修改为from Ui_test import Ui_testWin(去掉以一个‘.’)

if __name__ == "__main__":import sysapp = QApplication(sys.argv)testWin = testWin()testWin.show()sys.exit(app.exec_())

在test.py文件中添加槽函数showMsg,并在槽函数装饰器中调用此函数:

    @pyqtSlot()def on_pushButton_2_clicked(self):"""Slot documentation goes here."""# TODO: not implemented yetself.showMsg(2)def showMsg(self,n):print(f'您点击了按钮{n}。')

此时,如果再重新修改ui文件,并编译test.ui文件(compile form),编译后的结果:重置Ui_test.py文件,test.py文件不变。

划重点:上面利用Qt Designer增加了一个Radio Button控件,编译后需要对此控件进行信号与槽的绑定,直接在Eric中选中test.ui文件用Generate Dialog Code...命令,在弹出的对话框中做如下操作:

        编译后的结果:test.py文件会被更新,而不是被替换,原来手动添加的槽函数和代码都还在。

如此,实现了界面UI文件和逻辑文件分离!!!

总结

以上介绍了利用Eric6对UI文件进行编译,实现逻辑与界面分离。简要分成以下几个步骤:

1. 利用Qt Designer设计UI窗体文件xxxx.ui;

2. 利用Eric6新建一个项目文件xxxx.e4p;

3. 在Eric工程文件中添加对应的窗体文件xxxx.ui

3.1 编译窗体文件xxxx.ui,生成对应的Python文件Ui_xxxx.py,对应的菜单命令:Compile Form.../Compile All Forms

3.2 生成继承类文件(默认文件名同窗体文件名,xxxx.py,可根据需要修改,比如main.py)。对应菜单命令:Generate Dialog Code...

3.3 用重复调用3.2的命令(Generate Dialog Code...),根据需要添加槽函数装饰器,程序会自动更新xxxx.py文件。在此文件中手动写入代码不再被覆盖,比如手动添加程序入口函数。

另外,Eric还可以编译Qt Designer生成的资源文件。测试以后再上教程,这里给自己挖一个坑,后面过来填。

新手学习,如果有问题,各位看官请指正,谢谢。


后续来了,编译图片等资源文件。步骤如下:

1. 利用Qt Designer设计qrc资源文件,命名为resource.qrc

2. 在Eric项目工程文件中添加resource.qrc文件

3. 利用compile resource菜单命令编译生成resource_rc.py文件

4. 重新编译UI文件,系统会自动导入resource_rc.py(import resource_rc)

至此,UI界面中添加的资源都会被加载到界面,且不会影响逻辑代码。

注意:此处的资源文件已经被编译,img文件夹中的图片已经可有可无,不影响界面显示,以亲测。只是编译后的resource_rc.py文件有点大,估计是图片也被编译了。

项目教程 | Pycharm+Pyqt5+Eric6实现逻辑与界面分离(实例教学)相关推荐

  1. python逻辑与界面分离_一种数据与逻辑分离的Python单元测试工具

    一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...

  2. 项目测试 | Pycharm+Pyqt5+Qt Designer6+Eric7实现逻辑与界面分离

    主要问题 本实例主要解决的问题:Qt Designer设计完UI文件,逻辑代码继承编译后的UI类无法实现窗体控件随主窗体大小变化而缩放. 测试目标 1. 用Eric创建epj文件:test.epj U ...

  3. Python tkinter 实现程序逻辑与界面设计分离

    Python tkinter 实现程序逻辑与界面设计分离 tkinter是Python自带的图形界面设计模块,以下内容初步实现了tkinter下程序逻辑与界面设计的分离. 项目文件夹: project ...

  4. Anaconda3+PyQt5+Eric6+PyCharm 安装配置教程(Win10)

    PyQt5工具可以快速实现简单的界面开发,包括界面设计.布局管理以及业务逻辑实现.我们可以使用PyQt5工具可以快速画一个控件摆放整齐.界面整洁有序.布局合理的界面. Eric6是一个全功能的pyth ...

  5. Pycharm+PyQt5环境配置

    Pycharm+PyQt5环境配置 1. 安装pycharm.python3和pyqt5 2. 配置QT Designer 3. 配置编译路径pyuic 4. 测试 1. 安装pycharm.pyth ...

  6. c语言程序设计基础项目教程,C语言程序设计基础项目教程

    摘要: <C语言程序设计基础项目教程/高职高专计算机教学改革新体系规划教材>通过项目实例,重点讲解C语言结构化程序设计的基本思想,方法和解决实际问题的技巧,培养学习者设计,分析应用程序的能 ...

  7. pycharm+python3.7+pyqt配置_Python3+Pycharm+PyQt5环境搭建步骤图文详解

    搭建环境: 操作系统:Win10 64bit Python版本:3.7 Pycharm:社区免费版 一.Python3.7安装 下载到安装包后打开,如果想安装到默认路径(C盘)的话一直点下一步就可以了 ...

  8. pycharm python3.7环境_Python3+Pycharm+PyQt5环境搭建步骤图文详解

    搭建环境: 操作系统:Win10 64bit Python版本:3.7 Pycharm:社区免费版 一.Python3.7安装 下载到安装包后打开,如果想安装到默认路径(C盘)的话一直点下一步就可以了 ...

  9. 视频教程-大数据电视收视率实战项目教程(企业级案例)-Spark

    大数据电视收视率实战项目教程(企业级案例) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动等知名企业.拥 ...

最新文章

  1. Android 9.0 系统弹框
  2. QIIME 2用户文档. 16鉴定和过滤嵌合体序列q2-vsearch(2018.11)
  3. Python与C语言基础对比(Python快速入门)
  4. android连接usb外设通讯_iOS App连接外设的几种方式
  5. zabbix的rc控制脚本
  6. 制备pdms膜的方法_船体用钢板基底超疏水表面的制备和性能
  7. 利用filter替换字符串中的空格
  8. Javascript设计模式(五)代理模式
  9. 电容器在电路中的作用
  10. 手动抛出异常_TestNG和SpringBoot2.1.6整合后,导致TestNG的断言异常无法抛出,是为什么?...
  11. Officescan防毒墙安装部署
  12. 数学智力题 武士数独题目_数学智力题九宫格
  13. 表白网页制作_表白网页_创意表白_表白神器
  14. EPLAN插入符号为空的解决方法
  15. Debian 11(bullseye) 安装Nextcloud,使用PostgreSQL
  16. 【2022修复版】社群扫码进群活码引流完整运营源码/对接免签约支付接口/推广正常绑定下级/带视频搭建教程
  17. 28岁转行web前端,参加成都前端web培训可行吗?
  18. 免费的xshell(正版)
  19. 视频标清、高清、超清、1080P(这么多不同规格)
  20. Java把xx年xx月xx日(星期x) 上午xx点xx分转换Date类型

热门文章

  1. 聊天宝团队解散,老罗的社交梦破碎
  2. C语言简单将一串英文字符加密
  3. 基于MicroPython的ESP32开发
  4. 为什么要用babylonJS
  5. 【WINAPI】MessageBox细解(二)
  6. 依赖注入是什么意思?获取依赖的方式是什么?
  7. MQL4编程初探:从零开始学习EA编写
  8. (王道考研计算机网络)第三章数据链路层-第六节2:以太网
  9. android电视查看百度网盘,如何将手机百度网盘视频投屏到电视上观看?
  10. # 河源市产业发展可以这样试