gaphas是一个基于gtk+的绘图小部件

gaphas的Python项目详细描述


gaphas

build stateDocs Build Statecoveragecode style:black标准自述文件兼容gitterall contributors

< Buff行情>

gaphas是python的图表小部件库。

gaphas demo

gaphas是一个为绘制图表提供用户界面组件(widget)的库。可以将图表绘制到屏幕上,然后轻松导出为各种格式,包括SVG和PDF。想建立一个图表状的应用程序吗?那加法斯是给你的!使用此库可生成树、网络、流程图或其他图表。

这个库目前正被用于UML绘图的gaphorgaphorrafcon用于基于状态机的机器人控制,以及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())。画布 通过执行以下步骤执行更新:

  1. 使用item.pre_update(context)对每个标记为要更新的项进行预更新。
  2. 将画布更新为项矩阵,以便快速将坐标从画布坐标系转换为项坐标系。c2i矩阵作为项存储在项上。_matrix_c2i。
  3. 解决约束条件。
  4. 通过将第一个句柄的坐标设置为(0,0)来规范化项。
  5. 为通过规范化更改的项更新画布到项矩阵。
  6. 使用项发布更新。为每个标记为要更新的项(包括已更新的项)发布更新(上下文) 在约束求解步骤中标记。

gaphas尝试在{pre post}u update()方法中进行尽可能多的更新,因为它们是在应用程序不处理用户输入时调用的。

上下文包含cairoContext。例如,这可以用来计算文本的尺寸。要记住的一件事是,更新是从画布上完成的。项不应更新子项。更新步骤完成后,应该可以绘制项目。

约束求解

约束求解是该库的一大特点。解算器能够从数学上求解应用于项或项之间的约束规则。约束通过 项目。将约束应用于项的一个示例是,元素项使用约束来保持其矩形形状。在项之间应用约束的一个示例是在 命令连接它们。

应用于一个项的约束非常直接,因为所有变量都位于该项的同一坐标系中。变量,如句柄的x和y坐标,可以简单地放在一个约束中。

当两个项相互连接并创建约束时,会出现一个问题:变量位于不同的坐标系中。为了解决这个问题,定义了一个投影(来自solver.py)。用一个 投影实例,变量可以"投影"到另一个坐标系上。在这种情况下,当两个项目相互连接时,将使用画布的坐标系。

绘图

绘图是由视图完成的。所有标记为重绘的项(已更新的项)将按照它们在画布中的驻留顺序绘制。顺序从第一个根项开始,然后是它的子项,然后是第二个根项,等等。

传递给items draw()方法的视图上下文具有以下属性:

视图根据在draw(context)函数中绘制的项自动计算项的边界框(仅在真正需要时(例如,更新项之后)执行此操作)。边界框位于视区坐标中。

实际的绘图是由画家(painter.py)完成的。已经定义了一系列油漆工:一个用于把手,一个用于物品等。

工具

行为通过工具添加到画布(视图)中。可以将工具链接在一起,以提供更复杂的行为。

为了方便起见,定义了一个defaulttool,它是一个toolchain实例,添加了如下工具:

互动

工具处理与画布视图(可视化组件)的交互。尽管默认工具做了大量的工作,但在大多数情况下,您希望创建一些自定义连接行为。为了实现这些功能,handletool提供挂钩,包括连接、断开和粘合。

当一个项目从画布上移除,并且有其他项目(行)与之连接时,您可能会面临的挑战之一是如何做。gaphas通过在handle实例连接后为其提供一个断开连接的处理程序来提供解决方案。可以为该断开连接处理程序分配一个函数,然后在从画布中删除所连接的项时调用该函数。

撤消

gaphas有一个简单的内置系统,用于在其类中注册更改并通知应用程序。此代码位于state.py.

还有一个"还原器"框架。当对象改变其状态时,系统会收到通知,框架会找出要撤消操作必须应用的反向操作。

:mag:api

api可以分成amodel-view-controller三部分:

  1. 模型,包括画布和项目
  2. 视图,称为视图
  3. 控制器,称为工具

画布和项目

类: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 gaphas
0

类:gaphas.cons列车长度限制

确保一个变量小于另一个变量。

$ pip install gaphas
1

类:gaphas.constraint.centerconstraint

确保变量保持在其他两个变量之间。

$ pip install gaphas
2

类:gaphas.constraint.equationconstraint

解一个线性方程。

$ pip install gaphas
3

类:gaphas.constraint.balanceconstraint

使三个变量保持一致,保持特定的比率。

$ pip install gaphas
4

类:gaphas.constraint.lineconstraint

求解直线在特定点连接到直线或边的方程。

$ pip install gaphas
5

视图

类:gaphas.view.view

查看gaphas.canvas.canvas对象的类。

$ pip install gaphas
6

类:gaphas.view.gtkview

用于将gaphas.canvas.canvas呈现到屏幕的gtk+小部件。

$ pip install gaphas
7

类:gaphas.painter.painterchain

把一组油漆工绑起来。

$ pip install gaphas
8

类:gaphas.painter.drawContext

绘制项目的特殊上下文。它包含一个cairo上下文和一些属性,比如selected和focused。

  • **kwargs:上下文的可选cairo属性。
$ pip install gaphas
9

类: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 install
0

类: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 install
1

类: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 install
2

类: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 install
3

类: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不同的用户输入:

  1. ctrl+鼠标中键在上下方向拖动
  2. 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 install
4

类: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 install
5

类: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 install
6

类: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 install
7

类: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 install
8

类: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 install
9

类: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
arjan molenaar


dan yeaw

wrobell
wrobell

"检查-wrobell" rel="nofollow"title="reviewed pull requests">
jean luc stevens
让-卢克-史蒂文斯

franz steinmetz
franz steinmetz

adrian boguszewski
Adrian Boguszewski

rico belder
rico belder

adam boduch
adam boduch

janet jose
珍妮特·何塞

本项目遵循所有贡献者规范。欢迎任何形式的贡献!

  1. 检查未结问题或者打开一个新的问题,围绕一个功能想法或一个bug展开讨论。 有一个仅限first timers标记那些对代码库还不太熟悉的人应该比较理想的问题。
  2. forkGithub上的存储库开始对主控分支(或其分支)进行更改。
  3. 编写一个测试,显示错误已被修复或功能 按预期工作。
  4. 发送一个pull请求并对维护人员进行bug操作,直到它被合并并 出版。微笑:

请参见贡献文件!

:copyright:license

版权所有(c)Arjan Molenaar和Dan Yeaw

在apache许可证2.0下获得许可

小结:你可以用gaphas做你喜欢做的事情,只要你包含了必需的通知。此许可证包含来自代码贡献者的专利许可证。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java中的json IoT模块GET请求   在Java8中,如何使用lambda表达式中的条件?   Java 7中的io,如何通过一个实际示例演示文件之间的差异。存在和文件。不存在?   在Android Studio中使用Java从url获取JSON?   返回k个最小元素的java数组   java如何让我的安卓应用通过facebook登录并获得foursquare等好友列表   java如何在布局中以编程方式生成文本视图   在java中更改系统日期和时间的datetime代码段   java Hibernate和SQLite3,一对多关系映射   java Observable转换成kotlin问题   java在单独的线程中将VBO发送到GPU   属性文件中值的spring Java验证程序注释   java Spring启动:找不到javassist   java SimpleDataFormat时间解析   无法在linux上为Java程序正确设置PATH变量   将文件上载到FTP服务器时发生java异常   基于java TestNG的Selenium测试不能并行运行   java DAO类实例与DAO EJB   tomcat6部署*。使用Java Web Start(JNLP)的war应用程序