PyQt5之"Hello world"

一直想学Qt做一点GUI的东西,但是一直杂事缠身,无法静心去搞,最近一直在学校深度学习相关的东西,稍微抽空学一学PyQt,学完后想写一个自动生成词云的GUI程序。

01.PtQt5简介

PyQt5 是Digia的一套Qt5应用框架与python的结合。Qt库由Riverbank Computing开发,是最强大的GUI库之一 ,官方网站:www.riverbankcomputing.co.uk/news。
PyQt5是由一系列Python模块组成。超过620个类,6000函数和方法。能在Unix、Windows和Mac OS等主流操作系统上运行。
PyQt5类分为很多模块,主要模块有:

QtCore 包含了核心的非GUI的功能。主要和时间、文件与文件夹、各种数据、流、URLs、mime类文件、进程与线程一起使用。
QtGui 包含了窗口系统、事件处理、2D图像、基本绘画、字体和文字类。
QtWidgets 类包含了一系列创建桌面应用的UI元素。
QtMultimedia 包含了处理多媒体的内容和调用摄像头API的类。
QtBluetooth 模块包含了查找和连接蓝牙的类。
QtNetwork 包含了网络编程的类,这些工具能让TCP/IP和UDP开发变得更加方便和可靠。
QtPositioning 包含了定位的类,可以使用卫星、WiFi甚至文本。
Enginio 包含了通过客户端进入和管理Qt Cloud的类。
QtWebSockets 包含了WebSocket协议的类。
QtWebKit t包含了一个基WebKit2的web浏览器。
QtWebKitWidgets 包含了基于QtWidgets的WebKit1的类。
QtXml 包含了处理xml的类,提供了SAX和DOM API的工具。
QtSvg 提供了显示SVG内容的类。
QtSql 提供了处理数据库的工具。
QtTest 提供了测试PyQt5应用的工具。

02.Hello world

2.1 简单的窗口

QtWidgets类的两个子类ApplicationQWidget简单创建一个窗口,代码如下:

import sys
from PyQt5.QtWidgets import QApplication, QWidget


if __name__ == '__main__':

    app = QApplication(sys.argv)   # 每个PyQt5应用都必须创建一个应用对象。sys.argv是一组命令行参数的列表。Python可以在shell里运行,这个参数提供对脚本控制的功能。

    w = QWidget()   # QWidge控件是一个用户界面的基本控件,它提供了基本的应用构造器。默认情况下,构造器是没有父级的,没有父级的构造器被称为窗口(window)。
    w.resize(250, 150)    # resize()方法能改变控件的大小,这里的意思是窗口宽250px,高150px。
    w.move(300, 300)      # move()是修改控件位置的的方法。它把控件放置到屏幕坐标的(300, 300)的位置。
    w.setWindowTitle('Hello World')  # 我们给这个窗口添加了一个标题,标题在标题栏展示
    w.show()    # show()能让控件在桌面上显示出来。控件在内存里创建,之后才能在显示器上显示出来。

    sys.exit(app.exec_())   # 当调用exit()方法或直接销毁主控件时,主循环就会结束。sys.exit()方法能确保主循环安全退出。外部环境能通知主控件怎么结束。

2.2 修改后的窗口

上面的简单的窗口,是基于过程的的一小段代码,以便PyQt是面向对象编程的,更加方便简洁。下面给简单的窗口加一些小空间,使得它看上去很像我们平时看到窗口。
面向对象编程最重要的三个部分是类(class)、数据和方法。我们创建了一个类的调用,这个类继承自QWidget。这就意味着,我们调用了两个构造器,一个是这个类本身的,一个是这个类继承的。super()构造器方法返回父级的对象。init()方法是构造器的一个方法。

import sys
from PyQt5.QtWidgets import QWidget,QApplication,QDesktopWidget,QMessageBox,QPushButton,QToolTip
from PyQt5.QtGui import QIcon,QFont
from PyQt5.QtCore import QCoreApplication

class Exampel(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()     # 使用initUI()方法创建一个GUI

    def initUI(self):     # 实现initUI
        QToolTip.setFont(QFont('SansSerif', 10))   # 静态方法设置了提示框的字体
        qbtn = QPushButton('Quit', self)   # 组件类,创建一个继承自QPushButton的按钮
        qbtn.setToolTip('This is a <b>Quit</b> button')  # 创建提示框可以使用富文本格式的内容
        qbtn.clicked.connect(QCoreApplication.instance().quit)   # 太长了在代码下面解释
        qbtn.resize(qbtn.sizeHint())  # 提供了一个默认的按钮大小。
        qbtn.move(50, 50)

        self.setGeometry(300, 300, 300, 220)    # 设置窗口的大小
        self.setWindowTitle('Hello World')    # 设置窗口的标题
        self.center()   # 调用下面写的窗口居方法
        self.setWindowIcon(QIcon('web.png'))   # 添加窗口的图标
        self.show()  # 让窗口显示

    def center(self):  
        qr = self.frameGeometry()  # 获得主窗口所在的框架。
        cp = QDesktopWidget().availableGeometry().center()  # 获取显示器的分辨率,然后得到屏幕中间点的位置。
        qr.moveCenter(cp)    # 然后把主窗口框架的中心点放置到屏幕的中心位置。
        self.move(qr.topLeft())   # 然后通过move函数把主窗口的左上角移动到其框架的左上角,这样就把窗口居中了。

    def closeEvent(self, event): # 创建用X关闭时出现提示框,如果关闭QWidget,就会产生一个QCloseEvent,并且把它传入到closeEvent函数的event参数中。改变控件的默认行为,就是替换掉默认的事件处理。
        reply = QMessageBox.question(self, 'Message', "Are you sure to quit?", QMessageBox.Yes | QMessageBox.No,
                                     QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Exampel()
    sys.exit(app.exec_())

解释:
事件传递系统在PyQt5内建的single和slot机制里面。点击按钮之后,信号会被捕捉并给出既定的反应。QCoreApplication包含了事件的主循环,它能添加和删除所有的事件,instance()创建了一个它的实例。QCoreApplication是在QApplication里创建的。 点击事件和能终止进程并退出应用的quit函数绑定在了一起。在发送者和接受者之间建立了通讯,发送者就是按钮,接受者就是应用对象。

具体图没有截,可以自行尝试。

后续持续更新……
原创不易,如果觉得不错,就点个赞吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值