2012-03-25 14 views
1

私はciscoパケットトレーサまたはGNS3と同じ方法で動作するネットワークトポロジプログラムを作成し始めました。 ...私はいくつかのプロジェクトでPythonを使用していますが、wxPythonライブラリを初めて使用すると、使用する関数を理解することになると膨大なものになります。wxPythonネットワークトポロジツール - いくつかの助けが必要です - ご覧ください:)

このボタンをクリックすると、ルータボタン、スイッチ、ホストコンピュータ、サーバボタンなどのさまざまなボタンが表示されます。ボタン上のイメージを編集可能な領域に表示します。 (ペンキに似たもの)wxPythonのドラッグアンドドロップ機能を使用して、この領域内で移動することができます。私はこの領域のために何を使用するかについて私の頭を上げることはできません....私は 'wxPythonのペイントプログラムを作成する方法'などのGoogleで検索しようとしましたが、まだ運がありません。

誰かがこのプログラムをどのように作成するかお勧めしますか?ここで

カール

+0

「塗料プログラムを作成する方法」(本質的に何も意味しません)ではなく、「wxpythonドラッグドロップ」を検索してください。 http://wiki.wxpython.org/DragAndDrop –

+0

私はネットワークトポロジを構築するための領域が必要であるため、より多くの行を考えています。 wx.DCとwxPaintDCの使用....しかし、私は実際にそれらを使用する方法はありません。ウィンドウがある場合、そのウィンドウ内にはトポロジ領域とサブネット計算領域が必要です。しかし、メインウィンドウのセクション内に編集可能な領域を持つ方法はありますか?私が何を意味するかを見たら?返信ありがとうKarl –

答えて

1

はwxPythonの(ロビン・ダンによるアクションでwxPythonを)塗料を使用する方法を示して本からの抜粋です。これは役に立ちます:

import wx 
    class SketchWindow(wx.Window): 
    def __init__(self, parent, ID): 
    wx.Window.__init__(self, parent, ID) 
    self.SetBackgroundColour("White") 
    self.color = "Black" 
    self.thickness = 1 
    self.pen = wx.Pen(self.color, self.thickness, wx.SOLID) 
    self.lines = [] 
    self.curLine = [] 
    self.pos = (0, 0) 
    self.InitBuffer() 
    self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) 
    self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) 

    self.Bind(wx.EVT_MOTION, self.OnMotion) self.Bind(wx.EVT_SIZE, 
    self.OnSize) self.Bind(wx.EVT_IDLE, self.OnIdle) 
    self.Bind(wx.EVT_PAINT, self.OnPaint) 

    def InitBuffer(self): 
    size = self.GetClientSize() 
    self.buffer = wx.EmptyBitmap(size.width, size.height) 
    dc = wx.BufferedDC(None, self.buffer) 
    dc.SetBackground(wx.Brush(self.GetBackgroundColour())) 
    dc.Clear() 
    self.DrawLines(dc) 
    self.reInitBuffer = False 

    def GetLinesData(self): 
    return self.lines[:] 
    def SetLinesData(self, lines): 
    self.lines = lines[:] 
    self.InitBuffer() 
    self.Refresh() 
    def OnLeftDown(self, event): 
    self.curLine = [] 
    self.pos = event.GetPositionTuple() 
    self.CaptureMouse() 
    def OnLeftUp(self, event): 
    if self.HasCapture(): 
    self.lines.append((self.color, 
    self.thickness, 
    self.curLine)) 
    self.curLine = [] 
    self.ReleaseMouse() 
    def OnMotion(self, event): 
    if event.Dragging() and event.LeftIsDown(): 
    dc = wx.BufferedDC(wx.ClientDC(self), self.buffer) 
    self.drawMotion(dc, event) 
    event.Skip() 
    def drawMotion(self, dc, event): 
    dc.SetPen(self.pen) 
    newPos = event.GetPositionTuple() 
    coords = self.pos + newPos 
    self.curLine.append(coords) 
    dc.DrawLine(*coords) 
    self.pos = newPos 

    def OnSize(self, event): 
    self.reInitBuffer = True 
     def OnIdle(self, event): 
     if self.reInitBuffer: 
    self.InitBuffer() 
     self.Refresh(False) 
    def OnPaint(self, event): 
    dc = wx.BufferedPaintDC(self, self.buffer) 
    def DrawLines(self, dc): 
    for colour, thickness, line in self.lines: 
    pen = wx.Pen(colour, thickness, wx.SOLID) 
    dc.SetPen(pen) 
    for coords in line: 
    dc.DrawLine(*coords) 
    def SetColor(self, color): 
    self.color = color 
    self.pen = wx.Pen(self.color, self.thickness, wx.SOLID) 
    def SetThickness(self, num): 
    self.thickness = num 
    self.pen = wx.Pen(self.color, self.thickness, wx.SOLID) 
    class SketchFrame(wx.Frame): 
    def __init__(self, parent): 
    wx.Frame.__init__(self, parent, -1, "Sketch Frame", 
    size=(800,600)) 
    self.sketch = SketchWindow(self, -1) 
     if __name__ == '__main__': 
     app = wx.PySimpleApp() 
    frame = SketchFrame(None) 
     frame.Show(True) 
     app.MainLoop() 
+0

申し訳ありませんが不適切なインデント!私はちょうどコピーして貼り付けたので、本当にペイントでした。 –

+0

それは問題ではありません。助けてくれてありがとう。私は今夜​​試してみると、私はになることを参照してください。それが助けてくれたら、私はあなたに何もしません:) –

+0

問題はありません....受け入れられました!私はスタックオーバーフローの新しいとプロセスを実現しませんでした...私の悪い...あなたの助けをもう一度感謝します。 –

関連する問題