您的位置:首页 > 文旅 > 美景 > 青岛网站制作需要多少钱_天津网站建设优化_怎样做一个网站_成都网络运营推广

青岛网站制作需要多少钱_天津网站建设优化_怎样做一个网站_成都网络运营推广

2025/2/12 8:42:29 来源:https://blog.csdn.net/summerriver1/article/details/143077968  浏览:    关键词:青岛网站制作需要多少钱_天津网站建设优化_怎样做一个网站_成都网络运营推广
青岛网站制作需要多少钱_天津网站建设优化_怎样做一个网站_成都网络运营推广

使用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_())

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com