在学完tkinter后,发现tkinter在布局方面特别的不方便(Tkinter资料:http://effbot.org/tkinterbook/tkinter-index.htm),
因此学习pyqt5,之前用tkinter写了一个简单的python入门教程的exe,基本都是面向过程的编程思想,
很少将函数式编程思想和面向对象的思想,在学习pyqt5的过程中,希望培养面向对象编程的思想!
关于pyqt5的学习主要参考下面的教程,部分知识及代码相当于是对PyQt5 tutorial的总结!
http://zetcode.com/gui/pyqt5/introduction/
一.pyqt5各个模块功能
QtCore 模块包含了非GUI的功能设计。
这个模块被用来实现时间,文件和目录,不同数据类型,流,URL,mime类型,线程和进程。
QtGui 模块包含的类用于窗口化的系统结构,事件处理,2D绘图,基本图形,字体和文本。
QtWidgets 模块包含的类提供了一套UI元素来创建经典桌面风格用户界面。
QtMultimedia 模块包含的类用于处理多媒体内容和链接摄像头和无线电功能的API。
QtBluetooth 模块包含的类用于扫描蓝牙设备,并且和他们建立连接互动。
QtNetwork 模块包含的类用于网络编程,这些类使TCP/IP和UDP客户端/服务端编程更加容易和轻便。
QtPositioning 模块包含的类用于多种可获得资源的位置限定,包含卫星定位,Wi-Fi,或一个文本文件。
Enginio 模块用于解决客户端访问Qt云服务托管。
QtWebSockets 模块包含的类用于解决WebSocket通信协议。
QtWebKit 包含的关于浏览器的类用于解决基于WebKit2的支持库。
QtWebKitWidgets 模块包含的关于WebKit1的类基本解决浏览器使用基于QtWidgets应用问题。
QtXml 模块包含的类用于解析XML文件。这个模块提供SAX和DOM API解决方法。
QtSvg 模块提供类用于显示SVG文件内容。Scalable Vector Graphics (SVG) 是一种语言,
用XML来描述二维图形和图形应用程序。
QtSql模块提供类驱动数据库工作。
QtTest 模块包含了方法提供PyQt5应用的单元测试
二. PyQT4 and Pyqt5 fifferences
不兼容pyqt4, 模块被改写,新模块的引入
三.简单窗口的建立
没有父类的组件是顶级窗口。
见例子
四.关闭窗口
QPushButton(string text, QWidget parent = None)
text参数是将显示在按钮中的内容。parent参数是一个用来放置我们按钮的组件
qbtn.clicked.connect(QCoreApplication.instance().quit)
在PyQt5中,事件处理系统由信号&槽机制建立。如果我们点击了按钮,信号clicked被发送。
槽可以是Qt内置的槽或Python 的一个方法调用。QCoreApplication类包含了主事件循环;
它处理和转发所有事件。instance()方法给我们返回一个实例化对象。
注意QCoreAppli类由QApplication创建。点击信号连接到quit()方法,将结束应用。
事件通信在两个对象之间进行:发送者和接受者。发送者是按钮,接受者是应用对象
1 import sys
2 from PyQt5.QtWidgets import (QWidget, QToolTip,
3 QPushButton, QApplication)
4 from PyQt5.QtGui import QIcon
5 from PyQt5.QtGui import QFont
6 from PyQt5.QtCore import QCoreApplication
7
8 # ----------------------------------------------#
9 # 简单pyqt5
10 # ----------------------------------------------#
11
12
13 def create_ui():
14 app = QApplication(sys.argv) # 所有pyqt5必须创建一个QApplication对象
15
16 w = QWidget() # 没有父类的widget将被作为窗口使用
17 w.resize(250, 150) # 大小
18 w.move(300, 300) # 起始坐标
19 w.setWindowTitle('GUI') # 标题
20 w.show()
21 # 应用进入主循环。在这个地方,事件处理开始执行。
22 # 主循环用于接收来自窗口触发的事件,并且转发他们到widget应用上处理。
23 # 如果我们调用exit()方法或主widget组件被销毁,主循环将退出。
24 # sys.exit()方法确保一个不留垃圾的退出。
25 # 系统环境将会被通知应用是怎样被结束的
26 sys.exit(app.exec_())
27
28
29 # ----------------------------------------------#
30 # pyqt5修改显示图标
31 # ----------------------------------------------#
32 class Example1(QWidget):
33
34 def __init__(self):
35 super().__init__()
36 # super()方法返回了父类对象并调用了父类的构造方法
37 self.__init_ui()
38
39 def __init_ui(self):
40
41 self.setGeometry(300, 300, 300, 220)
42 self.setWindowTitle('GUI')
43 self.setWindowIcon(QIcon('f.ico'))
44
45 self.show()
46
47 # ----------------------------------------------#
48 # pyqt5显示提示框
49 # ----------------------------------------------#
50
51
52 class Example2(QWidget):
53
54 def __init__(self):
55 super().__init__()
56 self.__init_ui()
57
58 def __init_ui(self):
59
60 # 设置提示框的字体和大小
61 QToolTip.setFont(QFont('SansSerif', 20))
62
63 # 用于显示组件的提示框
64 self.setToolTip('This is a <b>QWidget</b> widget')
65
66 # 创建一个按键
67 btn = QPushButton('Button', self)
68
69 # 为按键创建提示框
70 btn.setToolTip('This is a <b>QPushButton</b> widget')
71
72 # setHint()方法给了按钮一个推荐的大小
73 btn.resize(btn.sizeHint())
74 btn.move(50, 50)
75
76 self.setGeometry(300, 300, 300, 200)
77 self.setWindowTitle('Tooltips')
78 self.show()
79
80 # ----------------------------------------------#
81 # 关闭窗口
82 # ----------------------------------------------#
83
84
85 class Example3(QWidget):
86
87 def __init__(self):
88 super().__init__()
89
90 self.__init_ui()
91
92 def __init_ui(self):
93 btn = QPushButton('Quit', self)
94 btn.clicked.connect(QCoreApplication.instance().quit)
95 btn.resize(btn.sizeHint())
96 btn.move(50, 50)
97
98 self.setGeometry(300, 300, 250, 150)
99 self.setWindowTitle('Quit button')
100 self.show()
101
102 # 测试简单的创建ui
103
104
105 # create_ui()
106
107 app = QApplication(sys.argv)
108
109 # pyqt5修改显示图标
110 # ex = Example1()
111
112 # pyqt5显示提示框
113 # ex1 = Example2()
114
115 # pyqt5退出命令,理解信号与槽
116 ex2 = Example3()
117 sys.exit(app.exec_())