python drawline_python 绘制动态图形

该博客介绍了如何使用Python的PyQt5库创建动态图形,包括绘制随机线条,并展示了实现一个实时更新的时钟应用,利用QPainter和QTimer进行图形绘制和更新。
摘要由CSDN通过智能技术生成

7b5aa88efd190614dece1681c2dae73e.pngimport sys

from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QDesktopWidget

from PyQt5.QtCore import Qt, QPoint,QTimer

from PyQt5.QtGui import QPainter, QColor,QBrush

from random import random

class Rect:

def __init__(self):

self.start = QPoint()

self.end = QPoint()

def setStart(self, s):

self.start = s

def setEnd(self, e):

self.end = e

def startPoint(self):

return self.start

def endPoint(self):

return self.end

def paint(self, painter):

painter.drawRect(self.startPoint().x(), self.startPoint().y(), self.endPoint().x() - self.startPoint().x(),

self.endPoint().y() - self.startPoint().y())

class Line(QWidget):

def __init__(self):

super().__init__()

self.initUI()

def initUI(self):

self.setMouseTracking(True)  # 保证得到鼠标信息

self.timer = QTimer()

self.timer.setInterval(100)

self.timer.timeout.connect(self.update)

self.timer.start()

self.setGeometry(300, 300, 500, 500)

self.setWindowTitle("绘画")

self.center()

def paintEvent(self, ev):

x1 = int(255 * random())

y1 = int(255 * random())

x2 = int(255 * random())

y2 = int(255 * random())

print(x1, y1, x2, y2)

painter = QPainter(self)

painter.save()

painter.setPen(QColor(166,66,250))

#painter.begin(self)

#self.painter.drawLine(100, 100, 200, 200)

painter.drawLine(x1, y1, x2, y2)

# 绘制函数

#painter.end()

painter.restore()

def center(self):

qr = self.frameGeometry()

cp = QDesktopWidget().availableGeometry().center()

qr.moveCenter(cp)

self.move(qr.topLeft())

if __name__ == "__main__":

app = QApplication(sys.argv)

line = Line()

line.show()

sys.exit(app.exec_())

#################

绘制时钟from PyQt5.QtCore import *

from PyQt5.QtGui import *

from PyQt5.QtWidgets import *

from math import *

import sys

class clockForm(QWidget):

def __init__(self):

super().__init__()

self.setWindowTitle("Clock")

self.timer = QTimer()

# 设置窗口计时器

self.timer.timeout.connect(self.update)

self.timer.start(1000)

def paintEvent(self, event):

# 时钟指针坐标点

hourPoint = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -30)]

minPoint = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -65)]

secPoint = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -80)]

# 时钟指针颜色

hourColor = QColor(200, 100, 0, 200)

minColor = QColor(0, 127, 127, 150)

secColor = QColor(0, 160, 230, 150)

side = min(self.width(), self.height())

painter = QPainter(self)

painter.setRenderHint(QPainter.Antialiasing)

painter.translate(self.width() / 2, self.height() / 2)  # painter坐标系原点移至widget中央

painter.scale(side / 200, side / 200)  # 缩放painterwidget坐标系,使绘制的时钟位于widge中央,即钟表支持缩放

# 绘制小时和分钟刻度线

painter.save()

for i in range(0, 60):

if (i % 5) != 0:

painter.setPen(minColor)

painter.drawLine(92, 0, 96, 0)  # 绘制分钟刻度线

else:

painter.setPen(hourColor)

painter.drawLine(88, 0, 96, 0)  # 绘制小时刻度线

painter.rotate(360 / 60)

painter.restore()

# 绘制小时数字

painter.save()

font = painter.font()

font.setBold(True)

painter.setFont(font)

pointSize = font.pointSize()

painter.setPen(hourColor)

nhour = 0

radius = 100

for i in range(0, 12):

nhour = i + 3  # 按QT-Qpainter的坐标系换算,3小时的刻度线对应坐标轴0度

if nhour > 12:

nhour = nhour - 12

x = radius * 0.8 * cos(i * 30 * pi / 180.0) - pointSize

y = radius * 0.8 * sin(i * 30 * pi / 180.0) - pointSize / 2.0

width = pointSize * 2

height = pointSize

painter.drawText(QRectF(x, y, width, height), Qt.AlignCenter, str(nhour))

painter.restore()

time = QTime.currentTime()

# 绘制小时指针

painter.save()

painter.setPen(Qt.NoPen)  # 无轮廓线

painter.setBrush(hourColor)  # 填充色

painter.rotate(30 * (time.hour() + time.minute() / 60))  # 每圈360° = 12h 即:旋转角度 = 小时数 * 30°

print(time.hour())

painter.drawConvexPolygon(QPolygonF(hourPoint))

painter.restore()

# 绘制分钟指针

painter.save()

painter.setPen(Qt.NoPen)  # 无轮廓线

painter.setBrush(minColor)  # 填充色

painter.rotate(6 * (time.minute() + time.second() / 60))  # 每圈360° = 60m 即:旋转角度 = 分钟数 * 6°

painter.drawConvexPolygon(QPolygonF(minPoint))

painter.restore()

# 绘制秒钟指针

painter.save()

painter.setPen(Qt.NoPen)  # 无轮廓线

painter.setBrush(secColor)  # 填充色

painter.rotate(6 * time.second())

painter.drawConvexPolygon(QPolygonF(secPoint))  # 每圈360° = 60s 即:旋转角度 = 秒数 * 6°

painter.restore()

if __name__ == "__main__":

app = QApplication(sys.argv)

form = clockForm()

form.show()

app.exec_()

如果本文对您有所帮助,请支持下本站哦!!!^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值