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

原文链接:https://blog.csdn.net/sqxyq/article/details/72832849

 

一、环境搭建

安装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自动生成的类的名称一致)

 

  1. 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_

 

posted @ 2018-10-08 15:08  傻蛋儿  阅读(743)  评论(0)    收藏  举报