Pyqt5设置刻度尺

文章介绍了一个使用PyQt5编写的交互式刻度尺应用,允许用户在刻度尺上绘制线条并进行移动和删除操作。通过鼠标事件处理,用户可以点击刻度尺创建线条,线条可以在刻度尺上拖动,同时支持右键点击选择线条并删除。代码示例详细展示了从创建窗口、绘制刻度尺到实现线条交互的全过程。

前言:

我发现百度上都搜不到有关PyQt有用的东西,全是C语言的Qt,对于我这种不懂C语言的萌新实在是不友好,官方文档也看不懂,实在是难堪。好像PyQt都没人用一样,哎。

我在学习Pyqt5过程中,看到ps的刻度尺然后突发奇想的想要去用pyqt5写一个刻度尺,然而只找到一个相关的代码。

链接:pyqt5 刻度条 尺子 刻度尺叫啥都行_不知道怎么写代码的麻瓜的博客-CSDN博客

 想要的成果如下:

  1、首先创建一个pyqt5的窗口

import sys

from PyQt5.QtWidgets import QWidget, QApplication

# 刻度尺
class GraduatedRuler(QWidget):

    def __init__(self):
        super(GraduatedRuler, self).__init__()
        self.gr_width = 800
        self.gr_height = 500

        self.setFixedSize(self.gr_width, self.gr_height)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    gr = GraduatedRuler()
    gr.show()
    sys.exit(app.exec_())

2、第一步:绘画出刻度尺

from PyQt5 import QtGui
from PyQt5.QtCore import QRect, QPoint, Qt
from PyQt5.QtGui import QPainter, QBrush, QPen    

    # 绘图事件
    def paintEvent(self, a0: QtGui.QPaintEvent):
        super().paintEvent(a0)

        painter = QPainter(self)        # 画图
        painter.setPen(QPen(QBrush(Qt.black), 1))  # 设置画笔
        width = int(self.gr_width)
        height = int(self.gr_height)

        painter.drawLine(20, 0, 20, height)     # 画一条左侧刻度尺线
        painter.drawLine(0, 20, width, 20)      # 画一条上边刻度尺线

        self.width_rect = QRect(0, 40, 20, height)      # 保存左侧刻度尺的范围
        self.height_rect = QRect(40, 0, width, 20)      # 保存上边刻度尺的范围

        # 左侧刻度,每10像素为一个小刻度,每40像素为一个大刻度
        for i in range(40, height, 10):
            if i % 40 == 0:
                painter.drawText(QPoint(2, i - 22), str(i))
                painter.drawLine(0, i, 20, i)
            else:
                painter.drawLine(20, i, 15, i)

        # 上边刻度,每10像素为一个小刻度,每40像素为一个大刻度
        for i in range(40, width, 10):
            if i % 40 == 0:
                painter.drawText(QPoint(i + 5, 10), str(i))
                painter.drawLine(i, 0, i, 20)
            else:
                painter.drawLine(i, 20, i, 15)

3、第二步:点击刻度尺,向右或向下拉动出现刻度线

    def __init__(self):
        super(GraduatedRuler, self).__init__()
        self.gr_width = 800
        self.gr_height = 500

        self.width_rect = None      # 左侧刻度尺的范围,是一个矩形,QRect类型
        self.height_rect = None     # 上边刻度尺的范围,是一个矩形,QRect类型

        self.width_moveLine = False     # 判断是否为左侧刻度尺被拉动
        self.height_moveLine = False    # 判断是否为上边刻度尺被拉动

        self.right_click = False  # 右键点击

        self.drawing_line = []      # 移动画线保存
        self.drew_line = []         # 保存所有画线

        self.setFixedSize(self.gr_width, self.gr_height)

    # 绘图事件
    def paintEvent(self, a0: QtGui.QPaintEvent):
        ......

        # 更换画笔样式
        painter.setPen(QPen(QColor(74, 255, 255), 1, Qt.SolidLine))

        # 绘制已保存的画线
        if self.drew_line:
            for line_norms in self.drew_line:
                line = line_norms['line']
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值