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