入门 PyQt6 看过来(案例)21~ 绘图案例

news2024/11/11 5:30:46

今天带给大家的是一些绘制图形的案例,第一个是绘制奥运图片,第二个是绘制五角星,第三个是绘制时钟。

1 绘制奥运图片

源码:

import sys
from PyQt6.QtWidgets import QApplication, QWidget
from PyQt6.QtCore import Qt, QRect
from PyQt6.QtGui import (QPainter, QPen, QBrush, QPalette, QColor, QFont, QImage)


class myWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setPalette(QPalette(Qt.GlobalColor.white))  # 设置窗口背景颜色为白色
        self.setAutoFillBackground(True)
        self.resize(600, 360)
        self.setWindowTitle("QPainter基本绘图")

    def paintEvent(self, event):  # 在窗口上绘图
        painter = QPainter(self)
        # 设置图形和文本抗锯齿
        painter.setRenderHint(QPainter.RenderHint.Antialiasing)
        painter.setRenderHint(QPainter.RenderHint.TextAntialiasing)
        # 设置画笔
        pen = QPen()
        pen.setWidth(3)  # 线宽3像素
        pen.setStyle(Qt.PenStyle.DotLine)  # 虚线
        # painter.setPen(pen)
        painter.setPen(Qt.PenStyle.NoPen)
        # 设置画刷
        brush = QBrush()
        brush.setColor(Qt.GlobalColor.red)
        brush.setStyle(Qt.BrushStyle.SolidPattern)  # 填充样式
        painter.setBrush(brush)
        # 绘图
        rect = QRect(20, 30, 200, 120)
        painter.drawRect(rect)

        # 设置画笔线宽为1像素,线型为实线,颜色为红色
        pen.setWidth(1)  # 线宽1像素
        pen.setStyle(Qt.PenStyle.SolidLine)  # 实线类型
        pen.setColor(Qt.GlobalColor.blue)  # 红颜色
        painter.setPen(pen)
        # 设置刷子颜色为蓝色,并设置填充样式为对角线模式
        brush.setColor(Qt.GlobalColor.blue)
        brush.setStyle(Qt.BrushStyle.BDiagPattern)  # 填充样式
        painter.setBrush(brush)
        # 使用新的画笔和刷子绘制一个扇形,其圆心位于(280, 30),半径分别为200和100,起始角度为30度,结束角度为300度
        painter.drawPie(280, 30, 200, 100, 30 * 16, 300 * 16)

        rect = QRect(20, 150, 240, 100)
        text = "我是奥运冠军,自信放光芒~!"
        pen.setColor(QColor(150, 255, 3))
        painter.setPen(pen)
        painter.setFont(QFont('楷体', 20))  # 设置字体
        painter.drawText(rect, Qt.AlignmentFlag.AlignCenter, text)

        image = QImage("./images/ticao.jpg")
        rect = QRect(280, 150, int(image.width() * 0.5), int(image.height()* 0.5))
        painter.drawImage(rect, image)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = myWidget()
    w.show()
    sys.exit(app.exec())

2 绘制五角星

源码如下:


# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 五角星的绘制.py
Description:
Author: lzq
date:2024-08-03 09:56
------------------------------------------------
"""
import math
import sys
from PyQt6.QtWidgets import QApplication, QWidget
from PyQt6.QtGui import QPainter, QColor, QBrush, QPainterPath, QPolygon
from PyQt6.QtCore import Qt, QPoint


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

    def initUI(self):
        self.setGeometry(100, 100, 500,400)
        self.setWindowTitle('金色五角星')
        self.show()

    def paintEvent(self, e):
        painter = QPainter()
        painter.begin(self)
        self.drawFlag(painter)
        painter.end()

    def drawFlag(self, qp):
        # 红色背景
        qp.setBrush(QBrush(QColor(244, 0, 2)))
        qp.drawRect(10, 10, 288*2, 192*2)
        polygon=QPolygon([QPoint(100, 100),QPoint(166, 100),QPoint(200, 30),QPoint(232, 100),QPoint(300, 100),QPoint(245, 140),QPoint(280, 220),QPoint(200, 170),QPoint(120, 220),QPoint(155, 140)])
        qp.setBrush(QBrush(QColor(255, 255, 0)))
        qp.drawPolygon(polygon)
        qp.end()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = ChinaFlag()
    sys.exit(app.exec())

3 绘制时钟

源码如下:

# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 时钟.py
Description:
Author: lzq
date:2024-08-03 10:17
------------------------------------------------
"""
import sys
from PyQt6.QtCore import Qt, QPoint, QTime, QTimer,QDate,QRect
from PyQt6.QtGui import QColor, QPainter, QPolygon,QFont, QRegion
from PyQt6.QtWidgets import  QApplication, QWidget

class myClock(QWidget):
    # 时针形状
    hourShape = QPolygon([QPoint(6,10),QPoint(-6,10),QPoint(0,-45)])
    # 分针形状
    minuteShape = QPolygon([QPoint(6,10),QPoint(-6,10),QPoint(0,-70)])
    # 时分秒针颜色
    hourColor = QColor(0, 255, 0)
    minuteColor = QColor(0, 0, 255)
    secondColor = QColor(255, 0, 0)
    def __init__(self):
        super().__init__()
        self.setWindowTitle('绘图综合:实时时钟')
        # 创建定时器, 每秒刷新
        timer = QTimer(self)
        timer.timeout.connect(self.update)
        timer.start(1000)
    def paintEvent(self, event):
        time = QTime.currentTime()
        date = QDate.currentDate()
        year=date.year()
        month = date.month()
        day=date.day()
        ymd=str(year)+'年'+str(month)+'月'+str(day)+'日'
        rect= QRect(220,150,200,30)

        painter = QPainter(self)
        painter.setFont(QFont('黑体',24))
        painter.drawText(rect,Qt.AlignmentFlag.AlignCenter,ymd)

        painter.setRenderHint(QPainter.RenderHint.Antialiasing) #抗锯齿
        side = min(self.width(), self.height())
        painter.translate(self.width()/2, self.height()/2)      #平移到窗口中心点
        painter.scale(side/200.0, side/200.0)                   # 缩放比例
        # 绘制小时刻度
        painter.setPen(myClock.hourColor)
        for i in range(12):
            painter.drawLine(88, 0, 96, 0)
            painter.rotate(30.0)
        # 绘制分针刻度
        painter.setPen(myClock.minuteColor)
        for j in range(60):
            if (j % 5) != 0:
                painter.drawLine(94, 0, 96, 0)
            painter.rotate(6.0)
        # 绘制时针
        painter.setPen(Qt.PenStyle.NoPen)
        painter.setBrush(myClock.hourColor)
        painter.save()
        painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))) # 旋转时针到正确位置
        painter.drawPolygon(myClock.hourShape)
        painter.restore()
        # 绘制分针
        #painter.setPen(Qt.PenStyle.NoPen)
        painter.setBrush(myClock.minuteColor)
        painter.save()
        painter.rotate(6.0 * (time.minute() + time.second() / 60.0))
        painter.drawConvexPolygon(myClock.minuteShape)
        painter.restore()
        # 绘制秒针
        painter.setPen(Qt.PenStyle.NoPen)
        painter.setBrush(myClock.secondColor)
        painter.drawEllipse(-4, -4, 8, 8)
        painter.save()
        painter.rotate(6.0 * time.second())
        painter.drawRoundedRect(-1, -1, 80, 2, 2, 2)
        painter.restore()

    # def resizeEvent(self, event):
    #     w = self.width()
    #     h = self.height()
    #     side = min(w, h)
    #     # 为窗口设置一个圆形遮罩
    #     maskedRegion = QRegion(w/2 - side/2, h/2 - side/ 2, side, side, QRegion.RegionType.Ellipse)
    #     self.setMask(maskedRegion)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = myClock()
    w.show()
    sys.exit(app.exec())
本文至此结束,喜欢点赞关注,您的关注和点赞是路卿进步的动力哦!老Baby们!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1974411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS mask-image 实现边缘淡出过渡效果

使用场景 在生产环境中,遇到一个需求,需要在一个深色风格的大屏页面中,嵌入 Google Maps。为了减少违和感,希望地图四边能够淡出过渡。 这里的“淡出过渡”,关键是淡出,而非降低透明度。 基于 Google Ma…

科普文:微服务之Spring Cloud Alibaba组件Nacos一致性协议Distro+Raft概叙

一、概要 Nacos是阿里开放的一款中间件,它主要提供三种功能:持久化节点注册,非持久化节点注册和配置管理。 二、一致性协议 - AP/CP Nacos不是纯粹的AP服务,也不是纯粹的CP服务,而是两者同时支持。 这要从服务注册…

【学习日记】静态库与动态库的区别及使用指南

文章目录 静态库与动态库的区别及使用指南静态库定义使用方式优点缺点使用示例创建静态库使用静态库 动态库定义工作原理优点缺点使用示例创建动态库使用动态库 如何区分静态库和动态库总结 封面 静态库与动态库的区别及使用指南 本文将详细介绍这两种库的定义、工作原理、优缺…

【机器学习】为什么使用Scikit-Learn来进行逻辑回归以及如何使用Scikit-Learn进行逻辑回归

引言 在Scikit-Learn中,逻辑回归是通过LogisticRegression类实现的。该类提供了多种方法来训练模型、进行预测以及评估模型性能。用户可以自定义许多参数,包括正则化类型(L1、L2或弹性网)、求解器类型(用于优化问题&am…

Cesium初探

Cesium 是一个开源 JavaScript 库,用于创建 3D 地理空间应用程序。它允许开发者在 Web 浏览器中构建高性能、交互式的 3D 地图和地球可视化应用,而无需安装任何插件。Cesium 支持多种数据格式,包括 3D Tiles(一种高效的 3D 场景流…

变量作用域、作用域链、return

全局变量 全局变量因为在全局操作会每次留存上次操作的结果 局部变量因为执行完成就会被销毁并不会保留本次操作的结果 可以通过传参和返回,将结果不断地专递处理 局部变量 参数也是局部变量 函数内的预解析预赋值 函数内的局部变量 如果同名全局变量遇到局部变量…

Java的jstat命令输出GC信息时携带时间信息(Windows系统中)

之前写了一篇在Linux系统中携带时间的文章:Java的jstat命令输出GC信息时携带时间信息(Linux系统中) 但是很多时候,我们都是在Windows系统中开发,可能有些人没有Linux环境,所以这篇文章就讲一下在Windows系统…

[论文精读]Multi-View Multi-Graph Embedding for Brain Network Clustering Analysis

论文原文:3504035.3504050 (acm.org) 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 省流版 1.1. 心得…

63 epoll服务器 (ET模式)

基于LT模式修改,并加入前面的应用层计算器,实现稍完整的服务器功能 1.修改tcp_socket.hpp,新增非阻塞读和非阻塞写接口 2.对于accept返回的new_sock加上EPOLLET这样的选项 注意:此代码暂时未考虑listen_sock ET的情况&#xff0c…

力扣高频SQL 50题(基础版)第三十九题

文章目录 力扣高频SQL 50题(基础版)第三十九题1327.列出指定时间段内所有的下单产品题目说明实现过程准备数据实现方式结果截图 力扣高频SQL 50题(基础版)第三十九题 1327.列出指定时间段内所有的下单产品 题目说明 表: Produc…

SQLite库笔记:API函数编程

本文主要介绍SQLite库的一些核心API函数,和实现数据库增删查改功能的C语言示例程序代码。 目录 1. API函数原型 1.1 sqlite3_open 1.2 sqlite3_close 1.3 sqlite3_free 1.4 sqlite3_errmsg 1.5 sqlite3_exec 1.6 sqlite3_get_table 1.7 sqlite3_free_table…

springboot废物回收管理商城-计算机毕业设计源码18221

基于Spring boot的废物回收管理商城 摘要 本研究基于Spring Boot框架设计并开发了一款废物回收管理商城系统,旨在有效整合废物回收资源,提高废物回收的效率和便捷性。通过对废物回收市场的调研与分析,结合现代互联网技术和物联网技术&#…

Docker Buildx 简介与安装指南

目录 1.Docker Buildx 简介 1. 引言 2. Docker Buildx 的背景和意义 3. Docker Buildx 的主要特性 4. 为什么选择 Docker Buildx 2.激活 Docker 实验性特性:一步设置 3.比如ARM架构下的Docker Buildx未自带 4.重启docker 🌐 无论你是初学者还是经…

非递归的归并排序

我们之前讲的快速排序有非递归的写法,那么归并排序也有非递归写法,我们一起来研究一下吧。 快速排序的非递归算法是使用的手动搭栈的方法,将区间存入栈里面,然后再排序,但是这次的归并排序可以吗?大家都知…

WebLogic 8.x中间件监控指标解读

监控易是一款功能强大的IT监控系统,能够全面监控各类IT设施的运行状态,及时发现并解决潜在问题。针对WebLogic 8.x中间件的监控,监控易提供了一系列详尽的指标,确保WebLogic集群和应用的稳定运行。 在WebLogic集群监控方面&#x…

OSPF路由协议----开放式最短路径优先

一、为什么需要OSPF? 1、RIP以跳数评估的路由并非最优路径 传输时间T=2Mps/64Kbps=32s 如果选择S0/0传输,传输时间T=2Mps/2Mps+2Mps/2Mps+2Mps/2Mps=3s 时长大大缩短。 2、RIP的最大跳数为16,网络尺度小 RIP协议限制网络直径不能朝超过16跳,只适用于小型网。 3、RIP收…

登录谷歌账号时无法登录,提示“您正常是在一部Google无法识别的设备上登录”,原因和如何解决?

这段时间,有几个朋友联系GG账号服务,说她们在登录谷歌账号的时候,提示Google账号无法登录,提示:您正尝试在一部Google无法识别的设备上登录,我们没有足够的信息来验证您的身份。为了安全起见,您…

浦语提示词工程实践

第一次 -失败 修改后:

中缀与前缀表达式之间的转换

文章目录 中缀表达式转前缀表达式总结参考链接 中缀表达式转前缀表达式 前缀表达式,又称波兰表达式,是一种编写算术表达式的方法,其中运算符位于操作数之前。 下面给出一种中缀表达式转前缀表达式的方法,利用辅助栈。 其规责如下…

朱锐 | 生命图像中的时间和意识

本文载于《科学・经济・社会》2023 年第 41 卷第 2 期第 37~61 页 作者简介: 朱锐(1968年10月—2024年8月1日),中国人民大学哲学院杰出学者、特聘教授,美国德州州立大学客座教授,主要从事神经哲学、心灵哲…