2010-12-07 3 views
0

前回の質問でPythonで円と矢を描くことができるパッケージを尋ねてきましたが、PyQt4を試してみることをお勧めしました。Pythonで数学的なものを描く

私の問題は、私がそのようなウィジェットを描くことができるが、そうすることができなかった機能を見つけることを試みたことです。

私の質問は、PyQt4で円、矢、およびその他の数学記号を描く方法を知っていれば、正しい方向に私を導いてください。

btw誰かが私に教えてくれるようなPythonのパッケージを知っていれば、助けてください。

私のプログラムにNFAを描く必要があるため、これが必要です。私はPyQt4で唯一興味がないことを言及したいと思いアップデートとして

http://en.wikipedia.org/wiki/File:NFAexample.svg

どうもありがとう


http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qgraphicsitem.html

私は、そのクラスとそのサブクラスは、何をするだろうと信じて:あなたは私のpythonと数学的なGUIを描画させることができますどのようなパッケージを認識している場合:)

+0

チュートリアルhttp://zetcode.com/tutorials/pyqt4/が見当たらない場合は、参考になる場合があります。 –

答えて

0

は、APIのこの部分を見てみましょう助けてくださいあなたは欲しい。矢印のようなものについては、線のような既存の要素からそれらを構築したり、あなたが望むことをするqgraphicsitemの独自のサブクラスを定義しなければならないかもしれません。

1

NetworkXをご覧ください。あなたのニーズにちょうど合うかもしれません!あなたはNFAsを描こうとしているので、galleryはできることのいくつかを示しています。

4

あなたは、このようなコードを使用して、この

alt text

のような図を作ることができgraphvizを使用する:

#!/usr/bin/env python 
# coding: utf-8 

import os 
import subprocess 
import shlex 

# dot code based on http://www.graphviz.org/Gallery/directed/fsm.html 
dot='''  
digraph finite_state_machine { 
     bgcolor="#ffffff" 
     rankdir=LR; 
     size="8,5" 
     node [shape = doublecircle]; S₁ S₃; 
     node [shape = circle]; S₀ S₂ S₄; 
     node [shape = circle]; S₄; 
     S₀ -> S₁ [ label = ε, weight=-1 ]; 
     S₀ -> S₃ [ label = ε, weight=-1 ]; 
     S₁ -> S₂:nw [ label = 0 ]; 
     S₂ -> S₁:se [ label = 0 ]; 
     S₁ -> S₁ [ label = 1 ]; 
     S₂ -> S₂ [ label = 1 ]; 
     S₃ -> S₄:nw [ label = 1 ]; 
     S₄ -> S₃:se [ label = 1 ]; 
     S₃ -> S₃ [ label = 0 ]; 
     S₄ -> S₄ [ label = 0 ]; 
} 
''' 
os.chdir('/tmp') 
with open('output_dot.svg','w') as outfile: 
    subprocess.Popen(shlex.split('dot -Tsvg'), 
        stdin=subprocess.PIPE,stdout=outfile).communicate(dot) 

通常、一つはコマンドラインからgraphvizのdotプログラムを呼び出します。 Python自体とは何の関係もありません。図は、プログラムで、しかし、あなたは巨大な文字列としてdotコードを構築するためのPythonを使用して、dotて文字列を処理するためにsubprocess.Popenを使用することができようにするに

dotは、SVGやPNGを含む多くの形式で出力できます。あるいは、graphvizライブラリとのより「Pythonic」インターフェースのためにpygraphvizを調査したいかもしれません。

graphvizはUTF-8でエンコードされた文字をサポートしているため、UTF-8文字セットで適切なシンボルを見つけることで、ダイアグラムに下付き文字やその他の数学記号を含めることができます。

graphvizの強みの1つは、ダイアグラムのレイアウトを退屈に指定する必要がないということです。単に、どのノードが他のノードに接続されているかだけです。ノードの位置は、graphviz(主に)によって自動的に決定されます。

この強度はやや衰弱しています。図の要素を望みどおり正確に配置することは難しいです。たとえば、S1とS2が水平に整列していないことに注意してください。私はまた、S0→S1の矢印をもっときれいに湾曲させる方法、S1とS2の間の矢印を完全に対称にする方法、あるいはS2→S1のエッジラベルを矢印などの下に表示する方法を知らない。 これらのことすべてを行う方法があるかもしれませんが、私はどのようにわかりません。

graphvizができることの他の例については、graphviz galleryを参照してください。

+0

@ user506710:ああ、その場合、おそらくPyQt4の方が良いでしょう。 – unutbu

+0

しかし、PyQt4の例や文書がないため、私は本当の問題を抱えていると言いました。あなたはそれを進める方法を知っていれば私を助けることができますか? –

+0

nice hack(Unicode添え字)。残念ながら、私がpdfにレンダリングするとき、文字はAcrobatによってデフォルトフォントで見つけられません。 – Nicolas78

関連する問題