当前位置: 首页 > article >正文

使用pyqt创建一个移动的矩形

使用pyqt创建一个移动的矩形

  • 程序功能概述
  • 效果
  • 详细代码

程序功能概述

程序的主要功能是在一个窗口内绘制一个矩形框,并使这个矩形框能够以固定的速度向右移动。当矩形框移动出窗口右侧边界时,它会重新出现在窗口的左侧。

效果

在这里插入图片描述

详细代码

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QColor, QBrush, QFontMetrics, QFont
from PyQt5.QtCore import Qt, QTimer


class MovingRectangle(QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('Moving Rectangle')
        self.setGeometry(300, 300, 640, 480)

        # 设置矩形的初始位置
        self.rect_pos = 0
        # 创建一个定时器,每50毫秒调用move_rectangle方法
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.move_rectangle)
        self.timer.start(50)  # 每50毫秒移动一次

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)  # 反锯齿效果

        # 绘制红色矩形
        painter.setPen(QColor(255, 0, 0))
        painter.setBrush(QBrush(Qt.red))
        painter.drawRect(self.rect_pos, 100, 100, 100)

        # 绘制白色数字 "1"
        font = QFont()
        font.setPixelSize(50)  # 设置字体大小
        painter.setFont(font)
        painter.setPen(Qt.white)

        # 获取字体的度量信息
        fm = QFontMetrics(font)
        # 计算文本宽度和高度
        text_width = fm.horizontalAdvance("1")
        text_height = fm.height()

        # 计算文本在矩形内的居中位置
        # 矩形的中心点
        rect_center_x = self.rect_pos + 50
        rect_center_y = 125

        # 文本的中心点相对于矩形中心的位置
        text_center_x = rect_center_x - (text_width / 2)
        text_center_y = rect_center_y + fm.ascent()  # 垂直居中对齐

        # 在矩形中心绘制文本
        painter.drawText(int(text_center_x), int(text_center_y), '1')

    def move_rectangle(self):
        # 更新矩形的位置
        self.rect_pos += 10
        if self.rect_pos > self.width():
            # 如果矩形的右侧超出了窗口的宽度,则将它移回左侧
            self.rect_pos = -100
        self.update()  # 强制重绘窗口


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

http://www.kler.cn/news/362881.html

相关文章:

  • word中的内容旋转90度
  • Python 第七节 魔法圆阵
  • 《重置MobaXterm密码并连接Linux虚拟机的完整操作指南》
  • Python语法基础:复数
  • linux介绍与基本指令
  • Java Swing的优秀开源项目学习推荐(UI、数据结构与设计模式)
  • 关于人工智能的一些展望
  • AI冲击,AI程序员-2024程序员危机与机遇并存
  • GO基础(string相关)
  • SQL 中查找重复数据的四种方法
  • 【功能超全】基于OpenCV车牌识别停车场管理系统软件开发【含python源码+PyqtUI界面+功能详解】-车牌识别python 深度学习实战项目
  • VuePress集成到Vue项目的方法
  • 【复旦微FM33 MCU 外设开发指南】外设篇1——硬件除法器
  • 算力的定义、单位、影响因素、提升方法、分类、应用等。附超算排名
  • Redis 五种数据类型详解
  • ChatGLM3-6B大模型部署+微调教程,收藏这一篇就够了!
  • 从0开始深度学习(18)——环境和分布偏移
  • 【毕业设计】工具大礼包之『Maven3.6.3安装与配置』
  • git 上传项目到 github 并生成二维码
  • 离散制造和流程制造分别是什么?它们有什么区别?
  • PPT自动化:快速更换PPT图片(如何保留原图片样式等参数更换图片)
  • Linux安装Anaconda和Pytorch
  • pgstattuple查看表膨胀
  • 【图解版】力扣第146题:LRU缓存
  • 程序员数学:用Python学透线性代数和微积分 中文目录
  • Java学习Day48:苦战小黄龙(基础增删改查新建)