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

news/2024/10/23 2:21:18/

使用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/news/1541214.html

相关文章

【C++】— 一篇文章让你认识STL

文章目录 🌵1.什么是STL?🌵2.STL的版本🌵3.STL的六大组件🌵4.STL的重要性🌵5. 如何学习STL🌵6. 学习STL的三种境界 🌵1.什么是STL? STL是Standard Template Library的简称…

Leetcode - 周赛419

目录 一,3318. 计算子数组的 x-sum I 二,3319. 第 K 大的完美二叉子树的大小 三,3320. 统计能获胜的出招序列数 四,3321. 计算子数组的 x-sum II 一,3318. 计算子数组的 x-sum I 本题数据范围较小,可以…

iOS18 TabbarController 切换动画

升级 iOS18后&#xff0c; TabbarController 切换会带有一个缩放动画&#xff0c;下面是自定义取消动画的代码 #import "TabBarVC.h"interface TabBarVC () <UIViewControllerAnimatedTransitioning, UITabBarControllerDelegate>endimplementation TabBarVC-…

代码训练营 day42|LeetCode 518,LeetCode 377,LeetCode 70

前言 这里记录一下陈菜菜的刷题记录&#xff0c;主要应对25秋招、春招 个人背景 211CS本CUHK计算机相关硕&#xff0c;一年车企软件开发经验 代码能力&#xff1a;有待提高 常用语言&#xff1a;C 系列文章目录 第42天 &#xff1a;第九章 动态规划 part05 文章目录 前言系…

软考-软件设计师(10)-专业英语词汇汇总与新技术知识点

场景 以下为高频考点、知识点汇总。 软件设计师上午选择题知识点、高频考点、口诀记忆技巧、经典题型汇总: 软考-软件设计师(1)-计算机基础知识点:进制转换、数据编码、内存编址、串并联可靠性、海明校验码、吞吐率、多媒体等: 软考-软件设计师(1)-计算机基础知识点:进制…

优选算法第一讲:双指针模块

优选算法第一讲&#xff1a;双指针模块 1.移动零2.复写零3.快乐数4.盛最多水的容器5.有效三角形的个数6.查找总价格为目标值的两个商品7.三数之和8.四数之和 1.移动零 链接: 移动零 下面是一个画图&#xff0c;其中&#xff0c;绿色部分标出的是重点&#xff1a; 代码实现&am…

PHP中的ReflectionClass常见用法

ReflectionClass是 PHP 中的一个类&#xff0c;它提供了有关类的信息的反射。 使用ReflectionClass可以在运行时获取关于类的各种信息&#xff0c;例如类的名称、方法、属性、注释等。 以下是一些常见的用法&#xff1a; 获取类的名称&#xff1a; $reflection new Reflec…

The 2021 CCPC Weihai Onsite A,D,J

A - Goodbye, Ziyin! 题意: 给定一个树的点数和边,问以每个点为根节点,有多少个树为二叉树 思路: 按照入度来算,但凡出现入度>4的一定不能形成二叉树,入度<2的拎起来之后可以作为根 int n,m,k,q[N]; void solve(){cin>>n;_for(i,n-1){cin>>k;q[k];cin&g…