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

server/2024/10/24 11:24:34/

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

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

程序功能概述

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

效果

在这里插入图片描述

详细代码

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QColor, QBrush, QFontMetrics, QFont
from PyQt5.QtCore import Qt, QTimerclass 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 + 50rect_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 += 10if self.rect_pos > self.width():# 如果矩形的右侧超出了窗口的宽度,则将它移回左侧self.rect_pos = -100self.update()  # 强制重绘窗口if __name__ == '__main__':app = QApplication(sys.argv)ex = MovingRectangle()ex.show()sys.exit(app.exec_())

http://www.ppmy.cn/server/134434.html

相关文章

docker run 命令解析

docker run 命令解析 docker run 命令用于从给定的镜像启动一个新的容器。这个命令可以包含许多选项,下面是一些常用的选项: -d:后台运行容器,并返回容器ID;-i:以交互模式运行容器,通常与 -t …

048_python基于Python的广东旅游数据分析

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…

MySQL内置函数CONCAT_WS与CONCAT

CONCAT_WS函数 在 MySQL 中,你可以使用 CONCAT_WS() 函数来实现多个字段用分隔符连接。CONCAT_WS() 的全称是 “Concatenate With Separator”(带分隔符的连接),它允许你指定一个分隔符(如逗号)&#xff0…

OpenLayers:用于在 web 应用程序中创建互动地图

OpenLayers 是一个强大的开源 JavaScript 库,用于在 web 应用程序中创建互动地图。它允许开发者轻松地集成和显示地理信息,支持多种地理数据格式和地图服务。以下是有关 OpenLayers 的一些关键信息和特点: 主要特性 支持多种地图数据源&…

YOLO11改进 | 注意力机制 | 添加SE注意力机制

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 本文介绍了YOLOv11添加SE注意力机制&…

linux中级(NFS服务器)

NFS:用于在NNIX/Linux主机之间进行文件共享的协议 流程:首先服务端开启RPC服务,并开启111端口,服务器端启动NFS服务,并向RPC注册端口信息,客户端启动RPC,向服务器RPC服务请求NFS端口&#xff0…

YOLO11改进 | 主干网络 | 替换EfficientViT为backbone【轻量化网络】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 本文给大家带来的教程是将YOLO11的backb…

基于neo4j旅游领域智能问答与图片展示系统

如果你正在苦恼选什么项目做毕业设计,或者对旅游、人工智能、数据可视化感兴趣,那么千万别错过这款基于Neo4j的互联网智能问答与旅游图片展示系统!😎它不仅实用,还拥有丰富的数据资源,技术亮点也是满满的。…