自学内容网 自学内容网

使用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, QTimer


class 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 + 50
        rect_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 += 10
        if self.rect_pos > self.width():
            # 如果矩形的右侧超出了窗口的宽度,则将它移回左侧
            self.rect_pos = -100
        self.update()  # 强制重绘窗口

    def toggle_movement(self):
        # 切换矩形是否移动的状态
        self.is_moving = not self.is_moving
        if 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_())

原文地址:https://blog.csdn.net/summerriver1/article/details/143077968

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!