pyqt5之简单窗口的创建

   在学完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_())

 




posted @ 2018-10-20 21:32  faithyiyo  阅读(2795)  评论(0编辑  收藏  举报