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

使用pyqt编写一个可控制的移动矩形

使用pyqt编写一个可控制的移动矩形

  • 程序功能
  • 效果
  • 代码

程序功能

创建了一个包含一个可移动矩形和一个控制按钮的简单GUI应用程序。矩形会持续向右移动,直到它离开屏幕后会重新出现在左边。可以通过点击控制按钮来暂停或恢复矩形的移动。

效果

在这里插入图片描述

代码

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
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# 创建一个定时器,用于矩形的移动self.timer = QTimer(self)self.timer.timeout.connect(self.move_rectangle)# 控制按钮的状态,初始为启动self.is_moving = True# 创建控制按钮并连接槽函数self.control_button = QPushButton('Stop', self)self.control_button.clicked.connect(self.toggle_movement)# 布局管理layout = QVBoxLayout()layout.addWidget(self.control_button)self.setLayout(layout)# 启动定时器if self.is_moving: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 = 125text_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()  # 强制重绘窗口def toggle_movement(self):# 切换矩形是否移动的状态self.is_moving = not self.is_movingif self.is_moving:self.control_button.setText('Stop')self.timer.start(50)  # 开始移动else:self.control_button.setText('Start')self.timer.stop()  # 停止移动if __name__ == '__main__':app = QApplication(sys.argv)ex = MovingRectangle()ex.show()sys.exit(app.exec_())

http://www.mrgr.cn/news/53772.html

相关文章:

  • pymobiledevice3使用介绍(安装、常用命令、访问iOS沙盒目录)
  • FineReport 控件的实际值与显示值
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(3)
  • 优化分页查询
  • vue项目引入高德地图
  • 设计模式——装饰者模式(8)
  • 【C语言】strtok、strerror函数
  • 智融SW6236 AACC 四口多协议移动电源 SOC
  • 大话设计模式解读07-模板方法
  • 2024 复健记
  • C++左值和右值
  • csdn(最新交流群)
  • 本机运行Nacos容器每次都要重新创建容器,该怎么办?
  • Mockito单元测试的坑
  • 【Canvas与艺术】八瓣点心包裹之一
  • 【工具变量】A股上市企业大数据应用(2001-2023年)-参考柏淑嫄实践
  • 数据结构_day3
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第四十五章 注册字符类设备
  • MySQL安装配置教程,入门学习攻略,重点知识点总结
  • 文字的力量
  • JAVA学习-练习试用Java实现“成绩归类”
  • 2024年十大优秀内部风险管理解决方案
  • 软考(网工)——Linux服务器配置
  • Redis 事务 主从复制
  • PRCV 2024 - Day 1
  • 大模型~合集12