PyQt学习笔记(1) 窗口

PyQt学习笔记(1) 窗口,第1张

PyQt各类模板
modulestatement
QtWidgets包含了一系列创建桌面应用的UI元素
QtMultimedia包含了处理多媒体的内容和调用摄像头API的类
QtBluetooth包含了查找和连接蓝牙的类
QtNetwork含了网络编程的类,这些工具能让TCP/IP和UDP开发变得更加方便和可靠
QtPositioning包含了定位的类,可以使用卫星、WiFi甚至文本
Enginio包含了通过客户端进入和管理Qt Cloud的类
QtWebSockets包含了WebSocket协议的类
QtWebKit包含了一个基WebKit2的web浏览器
QtWebKitWidgets包含了基于QtWidgets的WebKit1的类。
QtXmll包含了处理xml的类,提供了SAX和DOM API的工具
QtSvg提供了显示SVG内容的类,Scalable Vector Graphics (SVG)是一种是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式
QtSql提供了处理数据库的工具
QtTest提供了测试PyQt5应用的工具。
基本功能 简单窗口
from PyQt5.QtWidgets import QApplication,QWidget
import sys

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(250,250)
    w.move(300,300)
    w.setWindowTitle('Hello World')
    w.show()
    sys.exit(app.exec_())

说明:

  1. QApplicationQWidget在pyqt5.QtWidgets里。这是一个过程式编程
  2. QApplication是应用对象,必须创建
  3. QWidget控件是用户界面的基本控件,提供基本控件的构造器。没有父级的构造器称为窗口。
  4. sys.argv是一组命令行参数的列表。Python可以在shell里运行,这个参数提供对脚本控制的功能。
  5. move函数指左上角移位到(300,300)点(左上角算0,0点)
  6. 最后,我们进入了应用的主循环中,事件处理器这个时候开始工作。主循环从窗口上接收事件,并把事件派发到应用控件里。当调用exit()方法或直接销毁主控件时,主循环就会结束。sys.exit()方法能确保主循环安全退出。外部环境会收到主控件如何结束的信息。
    exec_()之所以有个下划线,是因为exec是一个Python的关键字。
带图标的窗口
from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5.QtGui import QIcon
import sys

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300,300,250,250) # move + resize
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('img/icon.png'))
        self.show()

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

说明:

  1. 这个是面向对象编程,创建类调用,类继承自QWidget。调用两个构造器,一个是类本身,一个是类继承的super()构造器方法返回父级的对象。
  2. 使用self.initUI()创建一个GUI,
  3. initUI的方法都继承自QWidget,setGeometrymoveresize的结合体,前两个参数为坐标,后两个参数为窗口大小
  4. setWindowIcon(QIcon(string))添加图标,创建一个QIcon对象,然后接受路径作为参数显示图标。

效果:

提示框
import sys
from PyQt5.QtWidgets import (QWidget, QToolTip, 
    QPushButton, QApplication)
from PyQt5.QtGui import QFont 

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        QToolTip.setFont(QFont('SansSerif',10)) #字体

        self.setToolTip('This is a QWidget widget') 

        btn = QPushButton('Button',self)
        btn.setToolTip('This is a QPushButton widget')
        btn.resize(btn.sizeHint()) 
        btn.move(50,50)

        self.setGeometry(300,300,250,250)
        self.setWindowTitle('ToolTips')
        self.show()

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

说明:

  1. QToolTip.setFont(QFont('SansSerif',10))QToolTip为提示框,字体为10 px的SansSerif
  2. self.setToolTip创建富文本框的提示内容
  3. QPushButton()创建按钮,并为按钮创建提示内容

效果:

关闭窗口
import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
from PyQt5.QtCore import QCoreApplication

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        qbtn = QPushButton('Quit',self)
        qbtn.clicked.connect(QCoreApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(50,50)

        self.setGeometry(300,300,250,250)
        self.setWindowTitle('Quit')
        self.show()

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

说明:

  1. QPushButton(string text, QWidget parent = None) parent为父类,self就是说父类是自身。
  2. qbtn.clicked.connect(QCoreApplication.instance().quit) 事件传递系统在pyqt5内建的single和slot机制里。点击按钮,就会有反应。
    QCoreApplication包含事件主循环,QCoreApplicationQApplication里.instance()创建实例,点击事件之后就会和quit函数绑定在一起。
消息盒子
import sys
from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300,300,250,250)
        self.setWindowTitle('Message Box')
        self.show()

    def closeEvent(self,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 = Example()
    sys.exit(app.exec_())

说明:

  1. 如果关闭QWidget,就会产生一个QCloseEvent,并且把它传入到closeEvent函数的event参数中。改变控件的默认行为,就是替换掉默认的事件处理,就是修改closeEvent函数
  2. QMessageBox消息框,第一个字符串是消息框标题,第二个字符串是提示内容,然后是消息框的按钮,最后一个参数是默认按钮。
  3. 返回值返回到reply里,如果YES,则接受响应,关闭事件。

效果:

窗口居中
import sys
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(250,250)
        self.center()

        self.setWindowTitle('Centerr')
        self.show()

    def center(self):
        qr = self.frameGeometry() #主窗口所在框架
        cp = QDesktopWidget().availableGeometry().center() #获得显示器分辨率,然后得到屏幕中间的点
        qr.moveCenter(cp) #主窗口框架中心点移到屏幕中心点
        self.move(qr.topLeft()) #主窗口左上角移到框架的左上角


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

说明:

  1. QtGui.QDesktopWidget提供了用户的桌面信息,包括屏幕的大小
  2. qr = self.frameGeometry() 获得主窗口所对应的框架
  3. QDesktopWidget().availableGeometry().center()获得屏幕分辨率然后得到中心点
  4. qr.moveCenter(cp)主框架中心点移到屏幕中心点

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/788643.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存