Python学习 Python3.5+PyQt5环境--------01、从一个GUI开始

时间:2021-01-15 22:59:14

一、环境搭建

安装Python3.5+PyQt5,下载指定的文件包,默认安装,注意选中路径(PATH加入)

http://blog.csdn.net/freewind06/article/details/52140198


二、学习参考

这是PyQt4的参考,制作一个简单的清除文本框内文字的GUI:

https://jingyan.baidu.com/article/a3761b2ba2b8581576f9aa98.html


这是PyQt5的参考:

http://blog.csdn.net/a359680405/article/details/45146535


三、实践步骤:

1、在PyQt5中拖拽好图形,生成GUI_ClearText.ui文件

2、使用命令  pyuic5 GUI_ClearText.ui -o GUI_ClearText.py  把 .ui文件转化为脚本文件 .py

3、此时生成的GUI_ClearText.py文件不能直接运行显示GUI,需要增加主函数(见下面注意点3),然后才能运行显示GUI。

4、在脚本目录下,使用 python GUI_ClearText.py 来运行



四、细节注意:

1、在PyQt里面设计好界面后,要把.ui文件转换成可编译的.py文件,版本PyQt4里的命令是pyuic4,版本PyQt5里的命令是pyuic5。具体语句是:pyuic5 GUI_ClearText.ui -o GUI_ClearText.py 

2、PyQt版本不同编译生成的文件格式有区别

3、直接编译出来的文件还不能直接运行,需要在编译出来的文件里添加如下代码(PyQt5,以下都以PqQt5为例),注意 ui=Ui_Dialog() 这句,名字Dialog() 要和前面的一致(这一句:class Ui_Dialog(object),即要和PyQt5自动生成的类的名称一致)

if __name__=="__main__":  
import sys
app=QtWidgets.QApplication(sys.argv)
widget=QtWidgets.QWidget()
ui=Ui_Dialog()
ui.setupUi(widget)
widget.show()
sys.exit(app.exec_())

4、可用在cmd的提示符后使用 "python  GUI_ClearText.py" 命令来运行(注意不是在python的解释器下运行);或者在windows下双击 GUI_ClearText.py 文件来运行。


五、全部代码:

文件名称为:GUI_ClearText.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'GUI_ClearText.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!



# 表示导入相关资源库
from PyQt5 import QtCore, QtGui, QtWidgets
import sys

class Ui_Dialog(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")

# 下面是该类的一些具体动作
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”


# PyQt5设计的GUI,要增加如下的代码
if __name__=="__main__":

app=QtWidgets.QApplication(sys.argv) # 实例化QApplication类,作为GUI主程序入口,需要import sys,可紧放在这句之前,也可放在代码最前面部分
widget=QtWidgets.QWidget() # 因为Qt Designer默认继承的object类,不提供show()显示方法,所以我们生成一个QWidget(窗口)对象来重载我们设计的Ui_Dialog类,达到显示效果。
ui=Ui_Dialog() # 实例化之前定义的窗口类
ui.setupUi(widget) # 设置布局,布局的对象是刚才生成的widget(窗口)
widget.show() # 使用 show() 方法
sys.exit(app.exec_()) # 当来自操作系统的分发事件指派调用窗口时,应用程序开启主循环(mainloop)过程,当窗口创建完成,需要结束主循环过程,这时候呼叫sys.exit()方法来,结束主循环过程退出,并且释放内存。为什么用app.exec_()而不是app.exec()?因为exec是python系统默认关键字,为了以示区别,所以写成exec_