gaphas是一个基于gtk+的绘图小部件
gaphas的Python项目详细描述
gaphas
< Buff行情>gaphas是python的图表小部件库。
gaphas是一个为绘制图表提供用户界面组件(widget)的库。可以将图表绘制到屏幕上,然后轻松导出为各种格式,包括SVG和PDF。想建立一个图表状的应用程序吗?那加法斯是给你的!使用此库可生成树、网络、流程图或其他图表。
这个库目前正被用于UML绘图的gaphorgaphor, rafcon用于基于状态机的机器人控制,以及ascend用于求解数学模型。
:书签选项卡:目录
:滚动:背景
gaphas的构建是为了提供gaphor的基本图表部分。由于gaphor是在gtk和cairo上构建的,因此,pygobject提供了对gui工具包的访问和对2d图形库的访问。然而,在那里并不是一个将这些技术抽象出来以轻松创建图表工具的项目。因此,gaphas被创建为一个库,允许其他人使用gtk和cairo创建一个图表工具。
工作原理如下:
- 项目(画布项目)可以添加到画布。
- 画布维护树结构(项之间的父子关系)。
- 约束求解器用于维护项约束和项间约束。
- 项目(和用户)不应该被边界框计算之类的事情所困扰。
- 非常模块化——例如,手柄支持可以插拔。
- 使用cairo进行渲染。
图书馆的主要部分包括:
- 画布-主画布类(项目容器)。
- 项目-放置在画布上的对象。
- 解算器-定义项目布局和连接的约束解算器。
- 视图-负责计算存储在四叉树数据结构中的边界框,以便快速访问。
- gtk view-在gtk应用程序中使用的视图,该应用程序使用工具与用户交互。
- 油漆工-工人们过去经常油漆物品。
- 工具-工具用于处理用户事件(如鼠标移动和按钮按下)。
- 方面-提供工具和项目之间的中间步骤。
:软盘:安装
要安装gaphas,只需使用pip:
$ pip install gaphas使用 强烈建议使用虚拟环境。
开发
使用Linux设置开发环境:
$ sudo apt-get install -y python3-dev python3-gi python3-gi-cairo gir1.2-gtk-3.0 libgirepository1.0-dev libcairo2-dev $ pip install poetry $ poetry install
:手电筒:使用
importgigi.require_version("Gtk","3.0")fromgi.repositoryimportGtkfromgaphasimportCanvas,GtkViewfromgaphas.examplesimportBoxfromgaphas.painterimportDefaultPainterfromgaphas.itemimportLinefromgaphas.segmentimportSegmentdefcreate_canvas(canvas,title):# Setup drawing windowview=GtkView()view.painter=DefaultPainter()view.canvas=canvaswindow=Gtk.Window()window.set_title(title)window.set_default_size(400,400)win_box=Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)window.add(win_box)win_box.pack_start(view,True,True,0)# Draw first gaphas boxb1=Box(60,60)b1.matrix=(1.0,0.0,0.0,1,10,10)canvas.add(b1)# Draw second gaphas boxb2=Box(60,60)b2.min_width=40b2.min_height=50b2.matrix.translate(170,170)canvas.add(b2)# Draw gaphas lineline=Line()line.matrix.translate(100,60)canvas.add(line)line.handles()[1].pos=(30,30)segment=Segment(line,view=None)segment.split_segment(0)window.show_all()window.connect("destroy",Gtk.main_quit)c=Canvas()create_canvas(c,"Simple Gaphas App")Gtk.main()
概述
canvas类(from canvas.py)充当项(from item.py)的容器。项目的父/子关系在此处维护(不在项目中)。
一个项可以有一组句柄(来自connector.py),这些句柄可用于操作该项(尽管这不是必需的)。每个项目都有自己的坐标系和X和Y位置,例如(0,0)点。item.matrix是相对于画布中定义的项的父项的转换。
句柄可以连接到端口。端口是允许句柄连接到另一个 项目。连接的过程取决于当前的情况,但大多数情况下都涉及在句柄与其连接的项之间创建某种约束(请参见端口)。
画布还包含一个约束解算器(来自solver.py),可用于解算数学依赖项 在项之间(例如应该对齐的句柄)。约束解算器还可用于保持满足项中包含的约束,例如,确保框保持其矩形形状。
view(from view.py)用于可视化画布。在视图中,可以应用一个工具(来自tool.py),它将处理用户输入,如按钮和按键。painter(来自painter.py)用于绘制实际的图形。此模块还使您可以轻松地绘制到屏幕以外的其他媒体,如打印机或PDF文档。
正在更新项目状态
如果项目需要更新,它会在画布上发送更新请求(canvas.request_update())。画布 通过执行以下步骤执行更新:
- 使用item.pre_update(context)对每个标记为要更新的项进行预更新。
- 将画布更新为项矩阵,以便快速将坐标从画布坐标系转换为项坐标系。c2i矩阵作为项存储在项上。_matrix_c2i。
- 解决约束条件。
- 通过将第一个句柄的坐标设置为(0,0)来规范化项。
- 为通过规范化更改的项更新画布到项矩阵。
- 使用项发布更新。为每个标记为要更新的项(包括已更新的项)发布更新(上下文) 在约束求解步骤中标记。
gaphas尝试在{pre post}u update()方法中进行尽可能多的更新,因为它们是在应用程序不处理用户输入时调用的。
上下文包含cairoContext。例如,这可以用来计算文本的尺寸。要记住的一件事是,更新是从画布上完成的。项不应更新子项。更新步骤完成后,应该可以绘制项目。
约束求解
约束求解是该库的一大特点。解算器能够从数学上求解应用于项或项之间的约束规则。约束通过 项目。将约束应用于项的一个示例是,元素项使用约束来保持其矩形形状。在项之间应用约束的一个示例是在 命令连接它们。
应用于一个项的约束非常直接,因为所有变量都位于该项的同一坐标系中。变量,如句柄的x和y坐标,可以简单地放在一个约束中。
当两个项相互连接并创建约束时,会出现一个问题:变量位于不同的坐标系中。为了解决这个问题,定义了一个投影(来自solver.py)。用一个 投影实例,变量可以"投影"到另一个坐标系上。在这种情况下,当两个项目相互连接时,将使用画布的坐标系。
绘图
绘图是由视图完成的。所有标记为重绘的项(已更新的项)将按照它们在画布中的驻留顺序绘制。顺序从第一个根项开始,然后是它的子项,然后是第二个根项,等等。
传递给items draw()方法的视图上下文具有以下属性:
- 视图-我们正在绘制的视图。
- 开罗-要绘制的CairoContext。
- selected-如果在视图中实际选择了项,则为true。
- 聚焦-如果项目具有焦点,则为真
- 悬停-如果鼠标指针位于项上,则为true。只有最上面的项目被标记为悬停。
- DropZone-项目被标记为DropZone。当发生这种情况时,项目将被拖到项目上,如果它被拖走,它将成为此项目的子项。
- draw_all-如果应该绘制项目上可绘制的所有内容(例如,计算项目的边框时),则为true。
视图根据在draw(context)函数中绘制的项自动计算项的边界框(仅在真正需要时(例如,更新项之后)执行此操作)。边界框位于视区坐标中。
实际的绘图是由画家(painter.py)完成的。已经定义了一系列油漆工:一个用于把手,一个用于物品等。
工具
行为通过工具添加到画布(视图)中。可以将工具链接在一起,以提供更复杂的行为。
为了方便起见,定义了一个defaulttool,它是一个toolchain实例,添加了如下工具:
工具链-委托给一组单独的工具,并跟踪哪个工具抓住了焦点。这通常在用户按下鼠标按钮时发生。一旦发生这种情况,工具请求"抓取",所有事件(如运动或按钮释放)都将直接发送到聚焦工具。
hovertool-将鼠标按钮下的项目设置为"悬停项目"。绘制此类项目时,其context.hovered_item标志将设置为true。
handletool-允许手柄被拖动并聚焦单击其句柄时的项目。
itemtool-选择项目并启用拖动项目。
text edit tool-一个演示工具,具有文本编辑弹出窗口。
rubberbandtool-在视图中没有项目或句柄的部分按下鼠标按钮时调用。它允许用户使用"橡皮筋"选择框选择项目。
互动
工具处理与画布视图(可视化组件)的交互。尽管默认工具做了大量的工作,但在大多数情况下,您希望创建一些自定义连接行为。为了实现这些功能,handletool提供挂钩,包括连接、断开和粘合。
当一个项目从画布上移除,并且有其他项目(行)与之连接时,您可能会面临的挑战之一是如何做。gaphas通过在handle实例连接后为其提供一个断开连接的处理程序来提供解决方案。可以为该断开连接处理程序分配一个函数,然后在从画布中删除所连接的项时调用该函数。
撤消
gaphas有一个简单的内置系统,用于在其类中注册更改并通知应用程序。此代码位于state.py.
还有一个"还原器"框架。当对象改变其状态时,系统会收到通知,框架会找出要撤消操作必须应用的反向操作。
:mag:api
api可以分成amodel-view-controller三部分:
- 模型,包括画布和项目
- 视图,称为视图
- 控制器,称为工具
画布和项目
类:gaphas.canvas.canvas
画布是物品的容器。
canvas=Canvas()
类:gaphas.item.item
画布上项目的基类(或接口)
item=Item()
属性:
矩阵
:项目的转换矩阵画布
:拥有项目的画布约束
:项约束列表,在将项添加到画布时自动注册;可以在子类中进行扩展
类:gaphas.connector.handle
手柄用于支持修改项目。
如果句柄连接到某个项,则connected\u to
属性应引用该项。a断开连接
提供处理所需断开连接行为的功能,例如,清除约束并连接到
位置(
gaphas.connector.position
):项目的位置,默认值为(0,0)。强度(int):要在约束解算器中使用的句柄的强度;默认值为normal,即20。
可连接(bool):使句柄可连接到其他项;默认值为false。
可移动(bool):使句柄可移动;默认值为true。
handle=Handle((10,10),connectable=True)
类:gaphas.connector.lineport
测线端口是在两个手柄之间提供测线的项目的一部分。
- 开始(
gaphas.connector.position
):线路的开始位置。 - 结束(
gaphas.connector.position
):线路的结束位置。
p1,p2=(0.0,0.0),(100.0,100.0)port=LinePort(p1,p2)
类:gaphas.connector.pointport
点端口使用手柄位置的端口将手柄连接到项目。
h=Handle((10,10))port=PointPort(h.pos)
类:gaphas.solver.solver
求解器解决约束。
a,b,c=Variable(1.0),Variable(2.0),Variable(3.0)solver=Solver()c_eq=EquationConstraint(lambdaa,b:a+b,a=a,b=b)solver.add_constraint(c_eq)
类:gaphas.constraint.equalsConstraint
使"a"和"b"相等。
$ pip install gaphas0
类:gaphas.cons列车长度限制
确保一个变量小于另一个变量。
$ pip install gaphas1
类:gaphas.constraint.centerconstraint
确保变量保持在其他两个变量之间。
$ pip install gaphas2
类:gaphas.constraint.equationconstraint
解一个线性方程。
$ pip install gaphas3
类:gaphas.constraint.balanceconstraint
使三个变量保持一致,保持特定的比率。
$ pip install gaphas4
类:gaphas.constraint.lineconstraint
求解直线在特定点连接到直线或边的方程。
$ pip install gaphas5
视图
类:gaphas.view.view
查看gaphas.canvas.canvas
对象的类。
$ pip install gaphas6
类:gaphas.view.gtkview
用于将gaphas.canvas.canvas
呈现到屏幕的gtk+小部件。
$ pip install gaphas7
类:gaphas.painter.painterchain
把一组油漆工绑起来。
$ pip install gaphas8
类:gaphas.painter.drawContext
绘制项目的特殊上下文。它包含一个cairo上下文和一些属性,比如selected和focused。
- **kwargs:上下文的可选cairo属性。
$ pip install gaphas9
类:gaphas.painter.itempainer
画师绘制项目。
$ sudo apt-get install -y python3-dev python3-gi python3-gi-cairo gir1.2-gtk-3.0 libgirepository1.0-dev libcairo2-dev $ pip install poetry $ poetry install0
类:gaphas.painter.cairoboundingboxcontext
它用于截取stroke()
、fill()
和其他上下文操作,以便计算所涉及项的边界框。
- cairo(cairo.context):要拦截的cairo上下文。
$ sudo apt-get install -y python3-dev python3-gi python3-gi-cairo gir1.2-gtk-3.0 libgirepository1.0-dev libcairo2-dev $ pip install poetry $ poetry install1
类:gaphas.painter.boundingboxpainter
一种itempainer,用于计算项目的边界框(在画布坐标中)。
$ sudo apt-get install -y python3-dev python3-gi python3-gi-cairo gir1.2-gtk-3.0 libgirepository1.0-dev libcairo2-dev $ pip install poetry $ poetry install2
类:gaphas.painter.handlepainter
绘制视图中标记为选定项的项目句柄。
类:gaphas.painter.toolpainer
允许视图上定义的工具进行绘图。
类:gaphas.painter.focuseditempainer
用于在聚焦项的所有其他层上绘制。
工具
与画布的交互是通过工具完成的。工具告诉我们必须做什么(比如移动)。为了使元素移动,定义了方面。各个方面说明了行为的执行方式。
类:gaphas.tools.toolchain
用来把工具串在一起。例如,链接一个悬停工具、handletool和selectiontool,以便将它们的功能组合到一个新工具中。
- 视图(
gaphas.view.view
):用于工具链的视图。
$ sudo apt-get install -y python3-dev python3-gi python3-gi-cairo gir1.2-gtk-3.0 libgirepository1.0-dev libcairo2-dev $ pip install poetry $ poetry install3
类:gaphas.tools.hovertool
使鼠标光标下的项成为悬停项。
- 视图(
gaphas.view.view
):要用于工具的视图;默认值为"无"。
类:gaphas.tools.itemtool
选择和拖动项目。
- 视图(
gaphas.view.view
):要用于工具的视图;默认值为"无"。
类:gaphas.tools.handletool
移动手柄的工具。
- 视图(
gaphas.view.view
):要用于工具的视图;默认值为"无"。
类:gaphas.tools.rubberbandtool
允许用户拖动"橡皮筋"来选择区域中的项目。
- 视图(
gaphas.view.view
):要用于工具的视图;默认值为"无"。
类:gaphas.tools.pantool
使用鼠标中键捕获拖动事件,并使用它们在视图中转换画布。
- 视图(
gaphas.view.view
):要用于工具的视图;默认值为"无"。
类:gaphas.tools.zoomtool
使用tw缩放的工具o不同的用户输入:
- ctrl+鼠标中键在上下方向拖动
- ctrl+鼠标滚轮
- 视图(
gaphas.view.view
):要用于工具的视图;默认值为"无"。
类:gaphas.tools.placementtool
用于在画布上放置项目的工具。
- 视图(
gaphas.view.view
):用于工具的视图。 - 工厂(工厂对象):用于创建新项目的画布项目工厂。
- 手柄工具(
gaphas.tools.handle tool
):要使用的手柄工具。 - 句柄索引(int):句柄工具要使用的句柄索引。
$ sudo apt-get install -y python3-dev python3-gi python3-gi-cairo gir1.2-gtk-3.0 libgirepository1.0-dev libcairo2-dev $ pip install poetry $ poetry install4
类:gaphas.aspects.itemfinder
在画布上查找项目。
- 视图(
gaphas.view.view
):用于搜索项目的视图。
类:gaphas.aspects.itemselection
管理项目的选择和取消选择。
- 项目(
gaphas.item.item
):要设置为聚焦或未聚焦的项目。 - 视图(
gaphas.view.view
):要聚焦或取消聚焦的视图。
类:gaphas.aspects.iteminmotion
管理项目的运动。
- 项目(
gaphas.item.item
):要移动的项目。 - 视图(
gaphas.view.view
):用于移动坐标的视图。
类:gaphas.aspects.itemhandlefinder
查找句柄。
- 项目(
gaphas.item.item
):项目。 - 视图(
gaphas.view.view
):从中获取句柄的视图。
$ sudo apt-get install -y python3-dev python3-gi python3-gi-cairo gir1.2-gtk-3.0 libgirepository1.0-dev libcairo2-dev $ pip install poetry $ poetry install5
类:gaphas.aspects.elementhandleselection
选择gaphas.item.element的句柄
- item(
gaphas.item.item
):句柄所属的元素项。 - 手柄(
gaphas.connector.handle
):选择或取消选择的手柄。 - 视图(
gaphas.view.view
):可用于应用光标的视图。
类:gaphas.aspects.itemhandleimotion
移动手柄。
- 项目(
gaphas.item.item
):句柄所属的项目。 - 手柄(
gaphas.connector.handle
):要移动的手柄。 - 视图(
gaphas.view.view
):用于坐标系的视图。
类:gaphas.aspects.itemconnector
将一个项目的句柄连接或断开与另一个项目或端口的连接。
- 项目(
gaphas.item.item
):句柄所属的项目。 - 手柄(
gaphas.connector.handle
):要连接的手柄。
类:gaphas.aspects.itemconnectionsink
使项目成为接收器,这是项目句柄连接到的另一个项目,就像连接的项目或端口一样。
- 项目(
gaphas.item.item
):要查找端口的项目。 - 端口(
gaphas.connector.port
):用作接收器的端口。
类:gaphas.aspects.itempaintfocused
在所有项的顶部绘制,仅用于聚焦项,并且仅当它悬停时(请参见
gaphas.painter.focuseditempainer
)。
- 项目(
gaphas.item.item
):聚焦的项目。 - 视图(
gaphas.view.view
):要绘制的视图。
扩展行为
通过导入以下模块,额外的行为将添加到默认视图行为中。
类:gaphas.segment.linesegment
分割和合并线段。
- 项目(
gaphas.item.item
):段的项目。 - 视图(
gaphas.view.view
):用于分割坐标系的视图。
类:gaphas.segment.segmenthandlefinder
扩展gaphas.aspects.itemhandlefinder以查找一行,如果鼠标位于两个句柄之间,则创建一个新句柄。位置与分段绘制器绘制的点对齐。
- 项目(
gaphas.item.item
):项目。 - 视图(
gaphas.view.view
):从中获取句柄的视图。
类:gaphas.segment.segmenthandleselection
扩展gaphas.aspects.itemhandleselection以在释放句柄时合并段。
- 项目(
gaphas.item.item
):句柄所属的项目。 - 手柄(
gaphas.connector.handle
):选择或取消选择的手柄。 - 视图(
gaphas.view.view
):用于应用光标的视图。
类:gaphas.segment.linesegmentpainter
这个画笔通过扩展gaphas.aspects.itempaintfoched来绘制一个gaphas.item.line
上的伪句柄。通过拖动这些点可以拆分每一行,这将产生一个新的句柄。
connecthandletool负责执行此功能所需的用户交互。
- 项目(
gaphas.item.item
):聚焦的项目。 - 视图(
gaphas.view.view
):要绘制的视图。
类:gaphas.guide.elementguide
为对齐gaphas.item.element的项提供指南
- 项目(
gaphas.item.item
):提供指南的项目。
类:gaphas.guide.lineguide
为对齐gaphas.item.line的项提供指南
- 项目(
gaphas.item.item
):提供指南的项目。
类:gaphas.guide.guidedMinMotion
移动项目并锁定位于同一位置的任何元素的位置。
- 项目(
gaphas.item.item
):要移动的项目。 - 视图(
gaphas.view.view
):带有用于移动坐标的参考线的视图。
$ sudo apt-get install -y python3-dev python3-gi python3-gi-cairo gir1.2-gtk-3.0 libgirepository1.0-dev libcairo2-dev $ pip install poetry $ poetry install6
类:gaphas.guide.guidedITemhandleimotion
移动手柄并锁定位于同一位置的任何元件的位置。
- 项目(
gaphas.item.item
):句柄所属的项目。 - 手柄(
gaphas.connector.handle
):要移动的手柄。 - 视图(
gaphas.view.view
):带有坐标系参考线的视图。
类:gaphas.guide.guidepainter
在所有项目的顶部绘制向导,仅用于聚焦的项目,并且仅当其悬停时。
- 项目(
gaphas.item.item
):聚焦的项目。 - 视图(
gaphas.view.view
):带有要绘制的参考线的视图。
其他
类:gaphas.tree.tree
以深度优先顺序存储节点的树结构。
$ sudo apt-get install -y python3-dev python3-gi python3-gi-cairo gir1.2-gtk-3.0 libgirepository1.0-dev libcairo2-dev $ pip install poetry $ poetry install7
类:gaphas.matrix.matrix
在cairo.matrix中添加@observated messages on state changes。
- xx(float):仿射变换的xx分量
- yx(float):仿射变换的yx分量
- xy(float):仿射变换的xy分量
- yy(float):仿射变换的yy分量
- x0(float):仿射变换的x平移分量
- y0(float):仿射变换的y平移分量
$ sudo apt-get install -y python3-dev python3-gi python3-gi-cairo gir1.2-gtk-3.0 libgirepository1.0-dev libcairo2-dev $ pip install poetry $ poetry install8
类:gaphas.table.table
table是一个存储类,它可以用来存储信息,就像在数据库表中一样,在所需的"列"上有索引。它包括索引,并针对查找进行了优化。
- 列(元组):表中的列。
- 索引(元组):
$ sudo apt-get install -y python3-dev python3-gi python3-gi-cairo gir1.2-gtk-3.0 libgirepository1.0-dev libcairo2-dev $ pip install poetry $ poetry install9
类:gaphas.quadtree.quadtree
四叉树是一种树型数据结构,其中每个内部节点最多有四个子节点。四叉树ARe最常用于对一个2进行分区
- 边界(元组):四叉树的边界(x,y,宽度,高度)。
- 容量(int);一个树存储桶中的元素数;默认值为10。
importgigi.require_version("Gtk","3.0")fromgi.repositoryimportGtkfromgaphasimportCanvas,GtkViewfromgaphas.examplesimportBoxfromgaphas.painterimportDefaultPainterfromgaphas.itemimportLinefromgaphas.segmentimportSegmentdefcreate_canvas(canvas,title):# Setup drawing windowview=GtkView()view.painter=DefaultPainter()view.canvas=canvaswindow=Gtk.Window()window.set_title(title)window.set_default_size(400,400)win_box=Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)window.add(win_box)win_box.pack_start(view,True,True,0)# Draw first gaphas boxb1=Box(60,60)b1.matrix=(1.0,0.0,0.0,1,10,10)canvas.add(b1)# Draw second gaphas boxb2=Box(60,60)b2.min_width=40b2.min_height=50b2.matrix.translate(170,170)canvas.add(b2)# Draw gaphas lineline=Line()line.matrix.translate(100,60)canvas.add(line)line.handles()[1].pos=(30,30)segment=Segment(line,view=None)segment.split_segment(0)window.show_all()window.connect("destroy",Gtk.main_quit)c=Canvas()create_canvas(c,"Simple Gaphas App")Gtk.main()0
类:gaphas.geometry.rectangle
可以添加(并集)、替换(交集)、点和矩形的矩形对象可以测试是否在矩形中。
- x(int):矩形的x位置。
- y(int):矩形的y位置。
- 宽度(int):矩形的宽度。
- 高度(int):矩形的高度。
importgigi.require_version("Gtk","3.0")fromgi.repositoryimportGtkfromgaphasimportCanvas,GtkViewfromgaphas.examplesimportBoxfromgaphas.painterimportDefaultPainterfromgaphas.itemimportLinefromgaphas.segmentimportSegmentdefcreate_canvas(canvas,title):# Setup drawing windowview=GtkView()view.painter=DefaultPainter()view.canvas=canvaswindow=Gtk.Window()window.set_title(title)window.set_default_size(400,400)win_box=Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)window.add(win_box)win_box.pack_start(view,True,True,0)# Draw first gaphas boxb1=Box(60,60)b1.matrix=(1.0,0.0,0.0,1,10,10)canvas.add(b1)# Draw second gaphas boxb2=Box(60,60)b2.min_width=40b2.min_height=50b2.matrix.translate(170,170)canvas.add(b2)# Draw gaphas lineline=Line()line.matrix.translate(100,60)canvas.add(line)line.handles()[1].pos=(30,30)segment=Segment(line,view=None)segment.split_segment(0)window.show_all()window.connect("destroy",Gtk.main_quit)c=Canvas()create_canvas(c,"Simple Gaphas App")Gtk.main()1
装饰符:@asyncio
按给定优先级安排空闲处理程序。
- single(bool):将修饰函数安排为只调用一次。
- 超时(int):修饰函数调用之间的时间。
- 优先级(int):glib.priority常量,用于设置事件优先级。
importgigi.require_version("Gtk","3.0")fromgi.repositoryimportGtkfromgaphasimportCanvas,GtkViewfromgaphas.examplesimportBoxfromgaphas.painterimportDefaultPainterfromgaphas.itemimportLinefromgaphas.segmentimportSegmentdefcreate_canvas(canvas,title):# Setup drawing windowview=GtkView()view.painter=DefaultPainter()view.canvas=canvaswindow=Gtk.Window()window.set_title(title)window.set_default_size(400,400)win_box=Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)window.add(win_box)win_box.pack_start(view,True,True,0)# Draw first gaphas boxb1=Box(60,60)b1.matrix=(1.0,0.0,0.0,1,10,10)canvas.add(b1)# Draw second gaphas boxb2=Box(60,60)b2.min_width=40b2.min_height=50b2.matrix.translate(170,170)canvas.add(b2)# Draw gaphas lineline=Line()line.matrix.translate(100,60)canvas.add(line)line.handles()[1].pos=(30,30)segment=Segment(line,view=None)segment.split_segment(0)window.show_all()window.connect("destroy",Gtk.main_quit)c=Canvas()create_canvas(c,"Simple Gaphas App")Gtk.main()2
装饰符:@nonrecursive
强制函数或方法不递归执行。 API/装饰器
importgigi.require_version("Gtk","3.0")fromgi.repositoryimportGtkfromgaphasimportCanvas,GtkViewfromgaphas.examplesimportBoxfromgaphas.painterimportDefaultPainterfromgaphas.itemimportLinefromgaphas.segmentimportSegmentdefcreate_canvas(canvas,title):# Setup drawing windowview=GtkView()view.painter=DefaultPainter()view.canvas=canvaswindow=Gtk.Window()window.set_title(title)window.set_default_size(400,400)win_box=Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)window.add(win_box)win_box.pack_start(view,True,True,0)# Draw first gaphas boxb1=Box(60,60)b1.matrix=(1.0,0.0,0.0,1,10,10)canvas.add(b1)# Draw second gaphas boxb2=Box(60,60)b2.min_width=40b2.min_height=50b2.matrix.translate(170,170)canvas.add(b2)# Draw gaphas lineline=Line()line.matrix.translate(100,60)canvas.add(line)line.handles()[1].pos=(30,30)segment=Segment(line,view=None)segment.split_segment(0)window.show_all()window.connect("destroy",Gtk.main_quit)c=Canvas()create_canvas(c,"Simple Gaphas App")Gtk.main()3
装饰符:@recursive
限制特定函数的递归。
- 极限(int):函数可以调用的递归循环数的极限;默认值为10000。
importgigi.require_version("Gtk","3.0")fromgi.repositoryimportGtkfromgaphasimportCanvas,GtkViewfromgaphas.examplesimportBoxfromgaphas.painterimportDefaultPainterfromgaphas.itemimportLinefromgaphas.segmentimportSegmentdefcreate_canvas(canvas,title):# Setup drawing windowview=GtkView()view.painter=DefaultPainter()view.canvas=canvaswindow=Gtk.Window()window.set_title(title)window.set_default_size(400,400)win_box=Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)window.add(win_box)win_box.pack_start(view,True,True,0)# Draw first gaphas boxb1=Box(60,60)b1.matrix=(1.0,0.0,0.0,1,10,10)canvas.add(b1)# Draw second gaphas boxb2=Box(60,60)b2.min_width=40b2.min_height=50b2.matrix.translate(170,170)canvas.add(b2)# Draw gaphas lineline=Line()line.matrix.translate(100,60)canvas.add(line)line.handles()[1].pos=(30,30)segment=Segment(line,view=None)segment.split_segment(0)window.show_all()window.connect("destroy",Gtk.main_quit)c=Canvas()create_canvas(c,"Simple Gaphas App")Gtk.main()4
:heart:贡献
感谢这些出色的人(emoji key):
arjan molenaar dan yeaw | wrobell "检查-wrobell" rel="nofollow"title="reviewed pull requests"> | 让-卢克-史蒂文斯 | franz steinmetz | Adrian Boguszewski | rico belder |
adam boduch | 珍妮特·何塞 |
本项目遵循所有贡献者规范。欢迎任何形式的贡献!
- 检查未结问题或者打开一个新的问题,围绕一个功能想法或一个bug展开讨论。 有一个仅限first timers标记那些对代码库还不太熟悉的人应该比较理想的问题。
- forkGithub上的存储库开始对主控分支(或其分支)进行更改。
- 编写一个测试,显示错误已被修复或功能 按预期工作。
- 发送一个pull请求并对维护人员进行bug操作,直到它被合并并 出版。微笑:
请参见贡献文件!
:copyright:license
版权所有(c)Arjan Molenaar和Dan Yeaw
在apache许可证2.0下获得许可
小结:你可以用gaphas做你喜欢做的事情,只要你包含了必需的通知。此许可证包含来自代码贡献者的专利许可证。