pyqt5之简单窗口的创建

时间:2023-03-09 04:14:10
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()方法,将结束应用。
事件通信在两个对象之间进行:发送者和接受者。发送者是按钮,接受者是应用对象
 import sys
from PyQt5.QtWidgets import (QWidget, QToolTip,
QPushButton, QApplication)
from PyQt5.QtGui import QIcon
from PyQt5.QtGui import QFont
from PyQt5.QtCore import QCoreApplication # ----------------------------------------------#
# 简单pyqt5
# ----------------------------------------------# def create_ui():
app = QApplication(sys.argv) # 所有pyqt5必须创建一个QApplication对象 w = QWidget() # 没有父类的widget将被作为窗口使用
w.resize(250, 150) # 大小
w.move(300, 300) # 起始坐标
w.setWindowTitle('GUI') # 标题
w.show()
# 应用进入主循环。在这个地方,事件处理开始执行。
# 主循环用于接收来自窗口触发的事件,并且转发他们到widget应用上处理。
# 如果我们调用exit()方法或主widget组件被销毁,主循环将退出。
# sys.exit()方法确保一个不留垃圾的退出。
# 系统环境将会被通知应用是怎样被结束的
sys.exit(app.exec_()) # ----------------------------------------------#
# pyqt5修改显示图标
# ----------------------------------------------#
class Example1(QWidget): def __init__(self):
super().__init__()
# super()方法返回了父类对象并调用了父类的构造方法
self.__init_ui() def __init_ui(self): self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('GUI')
self.setWindowIcon(QIcon('f.ico')) self.show() # ----------------------------------------------#
# pyqt5显示提示框
# ----------------------------------------------# class Example2(QWidget): def __init__(self):
super().__init__()
self.__init_ui() def __init_ui(self): # 设置提示框的字体和大小
QToolTip.setFont(QFont('SansSerif', 20)) # 用于显示组件的提示框
self.setToolTip('This is a <b>QWidget</b> widget') # 创建一个按键
btn = QPushButton('Button', self) # 为按键创建提示框
btn.setToolTip('This is a <b>QPushButton</b> widget') # setHint()方法给了按钮一个推荐的大小
btn.resize(btn.sizeHint())
btn.move(50, 50) self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Tooltips')
self.show() # ----------------------------------------------#
# 关闭窗口
# ----------------------------------------------# class Example3(QWidget): def __init__(self):
super().__init__() self.__init_ui() def __init_ui(self):
btn = QPushButton('Quit', self)
btn.clicked.connect(QCoreApplication.instance().quit)
btn.resize(btn.sizeHint())
btn.move(50, 50) self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Quit button')
self.show() # 测试简单的创建ui # create_ui() app = QApplication(sys.argv) # pyqt5修改显示图标
# ex = Example1() # pyqt5显示提示框
# ex1 = Example2() # pyqt5退出命令,理解信号与槽
ex2 = Example3()
sys.exit(app.exec_())