2012-03-25 39 views
1

在此先感谢您的答复....我已经开始建立网络拓扑方案,其中以相同的方式,思科Packet Tracer中或GNS3工作......我已经使用的Python的一些项目,但使用wxPython的图书馆首次被证明是一个巨大的极少数,当它来了解哪些功能使用。wxPython的网络拓扑工具 - 需要一些帮助 - 请大家看看:)

用户有多种不同的按钮,如路由器按钮,开关,主机和服务器按钮等,当他们点击这个按钮,我想在按钮上的图像出现在编辑区域。 (类似于绘画)用户可以使用wxPython拖放功能在该区域内移动它。我不能让我的周围有什么要用于这方面的头....我已经tryed在谷歌搜索“的wxPython如何创建一个画图程序”等,但仍然没有运气。

请可能有人建议他们将如何使这个计划?

卡尔

+0

也许搜索“wxpython拖放”,而不是“如何创建绘图程序”(这意味着什么都没有)。 http://wiki.wxpython.org/DragAndDrop – 2012-03-25 19:37:04

+0

即时通讯思想沿着监守我需要一个区域来构建网络拓扑线条更。使用wx.DC和wxPaintDC ....但我真的不知道如何使用它们。如果我有我的窗口,在该窗口内,我需要拓扑区域,然后是子网计算器区域。但是,我如何才能在我的主窗口的某个区域内设置可编辑区域?如果你明白我的意思?感谢您的回复卡尔 – 2012-03-26 07:48:54

回答

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

对不正确的缩进抱歉!真的是油漆,所以我只是复制和粘贴。 – 2012-03-26 15:18:05

+0

这不是一个问题。十分感谢你的帮助。我今晚有一个尝试,看看我到了。我让你没有,如果它有帮助:) – 2012-03-26 15:28:44

+0

没问题....接受!林新堆栈溢出,并没有意识到这一过程...我的坏...再次感谢您的帮助。 – 2012-03-26 17:05:23