Python 在librecad中用于无限大小绘制的小部件

Python 在librecad中用于无限大小绘制的小部件,python,pyqt,pyqt5,librecad,Python,Pyqt,Pyqt5,Librecad,Librecad使用一个可以无限调整大小的小部件,您可以尽可能地放大和缩小。它使用哪个小部件 当我在一个公共小部件中绘制时,绘制是在小部件的特定坐标处完成的。但是,我希望在小部件的浮动坐标处绘制,并使用固定到视口某些像素的线宽 调整大小之前: 调整大小后: 哪个小部件提供此功能?您必须使用QGraphicsView和QGraphicscene(请参阅): 从PyQt5导入QtCore、QtGui、qtwidget 类GraphicsView(QtWidgets.QGraphicsView):

Librecad使用一个可以无限调整大小的小部件,您可以尽可能地放大和缩小。它使用哪个小部件

当我在一个公共小部件中绘制时,绘制是在小部件的特定坐标处完成的。但是,我希望在小部件的浮动坐标处绘制,并使用固定到视口某些像素的线宽

调整大小之前:

调整大小后:


哪个小部件提供此功能?

您必须使用QGraphicsView和QGraphicscene(请参阅):

从PyQt5导入QtCore、QtGui、qtwidget
类GraphicsView(QtWidgets.QGraphicsView):
def uuu init uuu(self,parent=None):
超级(图形视图,自我)。\uuuu初始化\uuuuu(父级)
自身系数=1.2
self.setDragMode(QtWidgets.QGraphicsView.ScrollHandDrag)
self.setrenderints(
QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform
)
self.setMouseTracking(True)
自我设定场景(
qtwidts.qgraphicscene(QtCore.QRectF(-400,-400800800),self)
)
qtwidts.QShortcut(QtGui.QKeySequence.ZoomIn,self,activated=self.ZoomIn)#Ctrl++
qtwidts.QShortcut(QtGui.QKeySequence.ZoomOut,self,activated=self.ZoomOut)#Ctrl+-
@QtCore.pyqtSlot()
def缩放(自身):
自缩放(自缩放因子)
@QtCore.pyqtSlot()
def zoomOut(自身):
自缩放(1/self.factor)
def缩放(自身,f):
自刻度(f,f)
def drawForeground(自绘制、绘制、矩形):
super(GraphicsView,self)。drawForeground(画师,矩形)
如果不是HASTATR(自身,“光标位置”):
返回
保存
painter.setTransform(QtGui.QTransform())
pen=QtGui.QPen(QtGui.QColor(“黄色”))
笔设置宽度(4)
画师:画笔
r=self.mapFromScene(rect).boundingRect()
linex=QtCore.QLine(
r、 左(),self.cursor\u position.y(),r.right(),self.cursor\u position.y(),
)
liney=QtCore.QLine(
self.cursor_position.x(),r.top(),self.cursor_position.x(),r.bottom(),
)
对于线输入(linex,liney):
油漆工.拉丝(线)
恢复
def mouseMoveEvent(自身、事件):
self.cursor\u position=event.pos()
self.scene().update()
超级(GraphicsView,self).mouseMoveEvent(事件)
def wheelEvent(自我,事件):
角度=事件。角度增量().y()
如果角度<0:
self.zoomIn()
其他:
self.zoomOut()
超级(图形视图,自我)。wheelEvent(事件)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
随机输入
app=qtwidts.QApplication(sys.argv)
w=图形视图()
对于范围(4)内的uu:
r=QtCore.QLineF(
*随机样本(范围(-200200),2),*随机样本(范围(50150),2)
)
it=w.scene().addLine(r)
pen=QtGui.QPen(QtGui.QColor(*random.sample(范围(255),3)))
笔设置宽度f(5.0)
pen.set化妆品(真)
it.setPen(笔)
w、 调整大小(640480)
w、 show()
sys.exit(app.exec_())

您必须使用QGraphicsView和QGraphicscene(请参阅):

从PyQt5导入QtCore、QtGui、qtwidget
类GraphicsView(QtWidgets.QGraphicsView):
def uuu init uuu(self,parent=None):
超级(图形视图,自我)。\uuuu初始化\uuuuu(父级)
自身系数=1.2
self.setDragMode(QtWidgets.QGraphicsView.ScrollHandDrag)
self.setrenderints(
QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform
)
self.setMouseTracking(True)
自我设定场景(
qtwidts.qgraphicscene(QtCore.QRectF(-400,-400800800),self)
)
qtwidts.QShortcut(QtGui.QKeySequence.ZoomIn,self,activated=self.ZoomIn)#Ctrl++
qtwidts.QShortcut(QtGui.QKeySequence.ZoomOut,self,activated=self.ZoomOut)#Ctrl+-
@QtCore.pyqtSlot()
def缩放(自身):
自缩放(自缩放因子)
@QtCore.pyqtSlot()
def zoomOut(自身):
自缩放(1/self.factor)
def缩放(自身,f):
自刻度(f,f)
def drawForeground(自绘制、绘制、矩形):
super(GraphicsView,self)。drawForeground(画师,矩形)
如果不是HASTATR(自身,“光标位置”):
返回
保存
painter.setTransform(QtGui.QTransform())
pen=QtGui.QPen(QtGui.QColor(“黄色”))
笔设置宽度(4)
画师:画笔
r=self.mapFromScene(rect).boundingRect()
linex=QtCore.QLine(
r、 左(),self.cursor\u position.y(),r.right(),self.cursor\u position.y(),
)
liney=QtCore.QLine(
self.cursor_position.x(),r.top(),self.cursor_position.x(),r.bottom(),
)
对于线输入(linex,liney):
油漆工.拉丝(线)
恢复
def mouseMoveEvent(自身、事件):
self.cursor\u position=event.pos()
self.scene().update()
超级(GraphicsView,self).mouseMoveEvent(事件)
def wheelEvent(自我,事件):
角度=事件。角度增量().y()
如果角度<0:
self.zoomIn()
其他:
self.zoomOut()
超级(图形视图,自我)。wheelEvent(事件)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
随机输入
app=qtwidts.QApplication(sys.argv)
w=图形视图()
对于范围(4)内的uu:
r=QtCore.QLineF(
*随机样本(范围(-200200),2),*随机样本(范围(50150),2)
)
it=w.scene().addLine(r)
pen=QtGui.QPen(QtGui.QColor(*random.sample(范围(255),3)))
笔设置宽度f(5.0)
pen.set化妆品(真)
it.setPen(笔)
w、 调整大小(640480)
w、 show()
sys.exit(app.exec_())

如何在放大和缩小时实现行大小调整效果?这些线是在特定的坐标处绘制的,但它们的宽度是“固定的”。@PepeElMago33您想要吗