# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QDialog, QApplication
from Ui_hello import Ui_helloDlg
import sys
class helloDlg(QDialog, Ui_helloDlg):
def __init__(self):
super(helloDlg, self).__init__()
self.setupUi(self)
if __name__ == "__main__":
app = QApplication(sys.argv)
dlg = helloDlg()
dlg.show()
sys.exit(app.exec_())
先把上篇文章中编写的代码贴出来,然后再来一行一行去理解。
编码注释
# -*- coding: utf-8 -*-
指定文件编码为utf-8,这句话只能放在文件的第一行或第二行,还可以写成
# coding=utf-8
因为我们在脚本文件中用到了中文注释,也就是属于utf-8编码的,如果指定其他编码格式,python解释器就会报错。
导入模块
from PyQt5.QtWidgets import QDialog, QApplication
from Ui_hello import Ui_helloDlg
import sys
这三句话是为了导入接下来的代码用到的模块,有些类似C/C++语言中的#include <头文件>。导入的模块要么在系统目录中,要么就在当前文件的同一目录下,可直接import导入。
还有一种导入方式是from A import B,那么接下来就可以直接调用B模块。如果是from A import *,那么要用到A中的B模块,则需要用A.B()的方式,有一点像命名空间的感觉。只是借助这个词来理解一下。
类的实例化
class helloDlg(QDialog, Ui_helloDlg):
def __init__(self):
super(helloDlg, self).__init__()
self.setupUi(self)
任意一个你想要描述的对象的属性和方法可以抽象出来,定义成一个类。当你想描述一个具体特指的对象时,就需要对类进行实例化。Python类的初始化方法就是__init__()函数,类似于C++/C#的构造函数,具体实现又有点区别,过程是先创建一个空对象,然后用__init__()方法初始化这个空对象。
super方法则是继承父类的初始化方法,且防止多重继承时的重复调用。最后一句setupUi()方法就是初始化Qt设计师创建的窗体,包括各个控件、信号与槽。
main函数
if __name__ == "__main__":
app = QApplication(sys.argv)
dlg = helloDlg()
dlg.show()
sys.exit(app.exec_())
第一句if __name__ == "__main__": 判断是否正在运行当前py文件。
第二句app = QApplication(sys.argv)创建QApplication对象,参数为命令行接收到的参数。
第三句初始化对话框类。
第四句QDialog.show()方法显示非模式对话框对象。
第五句消息循环结束之后返回0,接着调用sys.exit(0)退出程序。
嗯,废了不少精力去解释这段代码,当然肯定理解的很片面甚至有模糊有误的地方,如果您看到错误,请及时指出,谢谢。我的邮箱是williamet.cn@gmail.com