gpt4 book ai didi

python - enaml 中是否有绘图/ Canvas 小部件?

转载 作者:行者123 更新时间:2023-11-28 17:07:53 25 4
gpt4 key购买 nike

我想制作的 UI 基本上是一个图像,用户可以在其中用线连接的点追踪路径。我希望它是跨平台的,所以我正在考虑试用 enaml。不过,我不确定如何完成此操作。

我查看了文档和示例,但找不到像 Canvas 小部件这样的东西。是否可以使用 enaml 在表面上进行任意绘图(点、线等)?

最佳答案

enaml 没有 Canvas 小部件,但您可以使用 RawWidget以及自定义 QWidget 和 QPainter 来绘制您需要的任何东西。

from atom.api import Typed, Event
from enaml.widgets.api import Window, Container, RawWidget
from enaml.core.declarative import d_
from enaml.qt.QtCore import Qt
from enaml.qt.QtGui import QPainter, QPainterPath, QMouseEvent
from enaml.qt.QtWidgets import QWidget


class QtPaintWidget(QWidget):
""" A widget that delegates drawing to enaml """
def __init__(self, parent, widget):
super(QtPaintWidget, self).__init__(parent)
self.widget = widget

def paintEvent(self, e):
qp = QPainter()
qp.begin(self)
# Trigger the 'paint' event on th PaintWidget
self.widget.paint(qp)
qp.end()

def mouseReleaseEvent(self, e):
super(QtPaintWidget, self).mouseReleaseEvent(e)
self.widget.mouse_event(e)


class PaintWidget(RawWidget):

#: Push the paint event up to enaml
paint = d_(Event(QPainter))

#: Handle mouse event in enaml
mouse_event = d_(Event(QMouseEvent))

def create_widget(self, parent):
return QtPaintWidget(parent, self)

def update(self):
self.proxy.widget.update()


enamldef Main(Window):
Container:
padding = 0
PaintWidget: canvas:
attr points = []
minimum_size = (500, 500)
paint ::
# See https://doc.qt.io/qt-5/qpainter.html
# for how to use the QPainter
qp = change['value']
qp.setBrush(Qt.white)
qp.drawRect(0, 0, 500, 500)
qp.setBrush(Qt.NoBrush)
qp.setPen(Qt.blue)
for p in points:
qp.drawPoint(p)
qp.setPen(Qt.red)
path = QPainterPath()
if len(points) > 1:
for i, p in enumerate(points):
if i==0:
path.moveTo(p)
else:
path.lineTo(p)
qp.drawPath(path)
mouse_event ::
# Save the position
e = change['value']
print(e)
if e.button() == Qt.RightButton:
del points[:]
else:
points.append(e.pos())
canvas.update()

和哇啦

Drawing

您不必将 paint 事件推送到 enaml,它只会使与其他小部件的交互变得更加容易。参见 QtPainter docshttp://zetcode.com/gui/pyqt5/painting/有关在 Qt 中绘图的更多信息。

关于python - enaml 中是否有绘图/ Canvas 小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49871342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com