Python学习 Python3.5+PyQt5环境--------02、代码与界面GUI分离
2017-06-08 15:32
846 查看
以GUI_ClearText.py为例,GUI_ClearText.py的源代码是界面和业务代码在一起的。
思路:
把原代码拆分为三个部分,分别实现窗口布局布局、业务实现、主程序调用功能:
一、窗口布局文件:GUI_ClearTextSeparateUi.py
二、业务实现文件:GUI_ClearTextSeparateBusi.py
三、主调用文件:GUI_ClearTextSeparateMain.py
详解:
一、窗口布局文件:GUI_ClearTextSeparateUi.py
1、创建Ui类,创建一个setupUi()方法,布局窗口布局。修改自GUI_ClearText.py里的类Ui_Dialog。
二、业务实现文件:GUI_ClearTextSeparateBusi.py
1、首先导入界面文件里的Ui类
from GUI_ClearTextSeparateUi import Ui
2、创建Busi类,继承自Ui,主调用程序里需要使用Ui类的setupUi()方法
3、创建Busi类的方法setupBusi()方法,实现业务(信号和槽的连接),以及定义相关部件显示出来的文字
三、主调用文件:GUI_ClearTextSep
4000
arateMain.py
1、生成一个QWidget(窗口)对象来重载我们设计的Busi类,达到显示目的。
widget=QtWidgets.QWidget()
2、实例化Busi类,
mywindow=Busi()
3、运行建立界面方法
mywindow.setupUi(widget)
4、运行建立业务方法
mywindow.setupBusi(widget)
思路:
把原代码拆分为三个部分,分别实现窗口布局布局、业务实现、主程序调用功能:
一、窗口布局文件:GUI_ClearTextSeparateUi.py
二、业务实现文件:GUI_ClearTextSeparateBusi.py
三、主调用文件:GUI_ClearTextSeparateMain.py
详解:
一、窗口布局文件:GUI_ClearTextSeparateUi.py
1、创建Ui类,创建一个setupUi()方法,布局窗口布局。修改自GUI_ClearText.py里的类Ui_Dialog。
# PyQt5 Designer 生成的代码 # 表示导入相关资源库 from PyQt5 import QtCore, QtGui, QtWidgets class Ui(object): # 定义一个GUI类,名称为 “Ui_Dialog” ,继承自 “object”,不是窗体不能直接调用 def setupUi(self, Dialog): # 定义方法“setupUi”,这个方法创建窗口,窗口名称为“Dialog”;布局相关窗口部件 Dialog.setObjectName("Dialog") # 设置窗口名称为“Dialog”,源自方法setupUi的必选参数 Dialog.resize(400, 300) # 设置窗口大小 self.label = QtWidgets.QLabel(Dialog) # 创建一个标签,并将标签加入到窗口Dialog中 self.label.setGeometry(QtCore.QRect(21, 100, 91, 20)) # 设置标签的大小和位置 self.label.setObjectName("label") # 设置标签的名称(指被引用的名称,而不是标签上显示的名称) # 以下类似的,设置输入框及按钮的相关信息 self.lineEdit = QtWidgets.QLineEdit(Dialog) self.lineEdit.setGeometry(QtCore.QRect(150, 100, 113, 22)) self.lineEdit.setObjectName("lineEdit") self.pushButton = QtWidgets.QPushButton(Dialog) self.pushButton.setGeometry(QtCore.QRect(170, 190, 97, 29)) self.pushButton.setObjectName("pushButton")
二、业务实现文件:GUI_ClearTextSeparateBusi.py
1、首先导入界面文件里的Ui类
from GUI_ClearTextSeparateUi import Ui
2、创建Busi类,继承自Ui,主调用程序里需要使用Ui类的setupUi()方法
3、创建Busi类的方法setupBusi()方法,实现业务(信号和槽的连接),以及定义相关部件显示出来的文字
from PyQt5 import QtCore, QtGui, QtWidgets from GUI_ClearTextSeparateUi import Ui # 导入来自文件GUI_ClearTextSeparateUi.py 里的名称为 Ui 的类,这个类实现窗口部件布局。 # 创建Ui的子类Busi,自动继承Ui的 setupUi 方法,这里定义实现业务的方法 class Busi(Ui): def setupBusi(self, Dialog): # 下面是该类的一些具体动作 self.retranslateUi(Dialog) # 调用自定义的方法“retranslateUi”(详细内容见下面),参数是窗口名称,作用是修改相关窗口部件的显示名称 self.pushButton.clicked.connect(self.lineEdit.clear) # 按钮的单击动作 连接到 文本框的清除动作:前面是信号signal,后面是槽slot QtCore.QMetaObject.connectSlotsByName(Dialog) # 关联信号槽,其作用是如其名称一样,用来将de>de>Dialog里的子孙de>de>Dialog的某些信号按照其objectName连接到相应的槽上,如 button_hello.setObjectName("hello_button") # 定义方法“retranslateUi”,以下代码是PyQt5自动生成的,作用是修改相关窗口部件显示的名称 def retranslateUi(self, Dialog): # 传入参数是窗体名称,修改相关窗口部件对外显示的名称 _translate = QtCore.QCoreApplication.translate # 此句似乎没有必要:下面应该可以直接定义窗口部件所显示的名称。待进一步了解 Dialog.setWindowTitle(_translate("Dialog", "Dialog")) # 设置名称为“Dialog”的窗体(前一个“Dialog”)显示的标题名字为“Dialog”(后一个“Dialog”) # Dialog.setWindowTitle( "Dialogwwwww") # 测试语句,和上句效果没有区别 # print(_translate("Dialogs", "Dialogaaa")) # 测试语句,_translate似乎是一个字符串截取功能,但是说明手册中又说前一个字符串一般是一个类名称 self.label.setText(_translate("Dialog", "Enter Text")) # 设置标签的显示文字为“Enter Text” self.pushButton.setText(_translate("Dialog", "Clear")) # 设置按钮的显示文字为“Clear”
三、主调用文件:GUI_ClearTextSep
4000
arateMain.py
1、生成一个QWidget(窗口)对象来重载我们设计的Busi类,达到显示目的。
widget=QtWidgets.QWidget()
2、实例化Busi类,
mywindow=Busi()
3、运行建立界面方法
mywindow.setupUi(widget)
4、运行建立业务方法
mywindow.setupBusi(widget)
from PyQt5 import QtCore, QtGui, QtWidgets from GUI_ClearTextSeparateBusi import Busi # 导入来自文件GUI_ClearTextSeparateBusi.py 里的名称为 Busi 的类,这个类实现业务要求。 import sys if __name__=="__main__": app=QtWidgets.QApplication(sys.argv) # 实例化QApplication类,作为GUI主程序入口,需要import sys,可紧放在这句之前,也可放在代码最前面部分 widget=QtWidgets.QWidget() # 因为Qt Designer默认继承的object类,不提供show()显示方法,所以我们生成一个QWidget(窗口)对象来重载我们设计的Ui_Dialog类,达到显示效果。 mywindow=Busi() # 实例化之前定义的窗口类 mywindow.setupUi(widget) # 设置布局Ui,布局的对象是刚才生成的widget(窗口) mywindow.setupBusi(widget) # 设置业务 widget.show() # 使用 show() 方法 sys.exit(app.exec_()) # 当来自操作系统的分发事件指派调用窗口时,应用程序开启主循环(mainloop)过程,当窗口创建完成,需要结束主循环过程,这时候呼叫sys.exit()方法来,结束主循环过程退出,并且释放内存。为什么用app.exec_()而不是app.exec()?因为exec是python系统默认关键字,为了以示区别,所以写成exec_
相关文章推荐
- Python学习 Python3.5+PyQt5环境--------01、从一个GUI开始
- Python学习 Python3.5+PyQt5环境--------03、使用PyInstaller3.2.1把py文件打包成exe文件
- Python_GUI学习笔记(1)----GUI界面设计开发库
- 【脚本语言系列】关于PythonGUI界面PyQT,你需要知道的事
- 如何使用pyQT做pythonGUI界面?
- Python 2.7 GUI 编程集成开发环境的搭建 Python 2.7 + PyQt 4 + Eric 6 环境搭建
- Python:GUI之tkinter学习笔记2界面布局显示
- centos7安装python3.5并配置pyqt开发环境
- [初学Python]学习如何编写GUI界面(初级)
- Windows平台搭建基于PyQt5.8.2开发Python GUI程序的环境(含打包过程)
- python3.5 + PyQt5 +Eric6 实现的一个计算器代码
- Python 2.7 GUI 编程集成开发环境的搭建 Python 2.7 + PyQt 4 + Eric 6 环境搭建
- [1]PyQt学习01-Qt Designer生成的界面UI代码分析
- 少说话多写代码之Python学习002——环境搭建
- Python学习之IDE(Eric4)------windows下搭建Python开发环境[python2.7+pyqt4(PyQt-Py2.7-x32-gpl-4.9.6-1)+Eric4(eric
- Python学习之Django的管理界面代码示例
- python学习笔记之PyQt环境的搭建
- python使用pyqt写带界面工具的示例代码
- 深度学习tensorflow-gpu环境搭建避坑指南-win10_anaconda_python3.5_cuda8.0
- PyQt5 环境配置和Python GUI编程介绍