前言:
我发现百度上都搜不到有关PyQt有用的东西,全是C语言的Qt,对于我这种不懂C语言的萌新实在是不友好,官方文档也看不懂,实在是难堪。好像PyQt都没人用一样,哎。
我在学习Pyqt5过程中,看到ps的刻度尺然后突发奇想的想要去用pyqt5写一个刻度尺,然而只找到一个相关的代码。
想要的成果如下:

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']

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

282

被折叠的 条评论
为什么被折叠?



