2012-03-25 2 views
1

미리 답변 해 주셔서 감사합니다 .... 나는 시스코 패킷 트레이서 또는 GNS3와 같은 방식으로 작동하는 네트워크 토폴로지 프로그램을 만들기 시작했습니다. ... 저는 파이썬을 여러 프로젝트에 사용했지만 wxPython 라이브러리를 처음으로 사용하는 것은 사용할 함수를 이해하는 데 큰 도움이됩니다.wxPython 네트워크 토폴로지 도구 - 도움이 필요함 - 제발 봐주세요 :)

사용자는 라우터 단추, 스위치, 호스트 컴퓨터 및 서버 단추 등 다양한 단추가 있습니다.이 단추를 클릭하면 편집 가능한 영역에 단추의 이미지가 나타납니다. (페인트와 비슷해야 함) 사용자는 wxPython 끌어서 놓기 기능을 사용하여이 영역 내에서 이동할 수 있습니다. 나는이 영역을 위해 무엇을 사용해야하는지에 대해 내 머리를 기울이지 않는다 .... 나는 'wxPython for paint program'을 찾기 위해 구글에서 검색을 시도했지만 여전히 운이 없다.

누군가이 프로그램을 만드는 방법을 제안 할 수 있습니까? 여기에 칼

+0

"페인트 프로그램을 만드는 방법"(본질적으로 아무 것도 의미)보다는 "wxpython 드래그 드롭"을 검색하십시오. http://wiki.wxpython.org/DragAndDrop –

+0

내가 네트워크 토폴로지를 구성 할 영역이 필요하기 때문에 Im을 더 많이 생각해보십시오. 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

그게 문제가되지 않습니다. 도움을 많이 주셔서 감사합니다. Il은 오늘 밤에 시험을 보았고, 나는 도착했다. 일하는 데 도움이된다면 일리노이하자 :) –

+0

문제 없습니다 .... 수락 됨 !! 인스턴트 메신저 스택 오버 플로우와 didnt는 과정을 깨닫지 않는다. .. 나쁘다. .. 당신의 도움에 대해 다시 고맙다. –

관련 문제