bounty将在7小时后过期。回答此问题可获得+300的声誉奖励。Swatcat正在寻找来自声誉良好来源的答案。
我正在尝试使用wxPython Phoenix在Python中创建一个拖放应用程序(就像虚幻引擎处理事件的方式一样-例如here)。我已经找到了这个Stack Overflow question,我已经弄清楚了如何适应它,使它画一个矩形,但我不知道如何有连接器节点和画线之间的矩形。任何人都可以链接我一个很好的教程或演示程序请(这将是非常感谢)作为一个起点。
gorkyyrv1#
此链接可能会有帮助(DragImage演示文件):https://github.com/wxWidgets/wxPython-Classic/blob/master/demo/DragImage.py
dnph8jn42#
当然,这里有一个例子,说明如何在wxPython中创建一个拖放应用程序,在形状之间使用连接器和线条:
import wx class Shape: def __init__(self, x, y, width, height, color): self.x = x self.y = y self.width = width self.height = height self.color = color class Connector: def __init__(self, start, end): self.start = start self.end = end class MyFrame(wx.Frame): def __init__(self): super().__init__(None, title="Drag and Drop Shapes") self.shapes = [] self.connectors = [] self.selected_shape = None self.dragging = False self.offset = (0, 0) self.Bind(wx.EVT_PAINT, self.on_paint) self.Bind(wx.EVT_LEFT_DOWN, self.on_left_down) self.Bind(wx.EVT_LEFT_UP, self.on_left_up) self.Bind(wx.EVT_MOTION, self.on_motion) def on_paint(self, event): dc = wx.PaintDC(self) for shape in self.shapes: dc.SetPen(wx.Pen(shape.color)) dc.SetBrush(wx.Brush(shape.color)) dc.DrawRectangle(shape.x, shape.y, shape.width, shape.height) for connector in self.connectors: start = (connector.start.x + connector.start.width // 2, connector.start.y + connector.start.height) end = (connector.end.x + connector.end.width // 2, connector.end.y) dc.DrawLine(start[0], start[1], end[0], end[1]) def on_left_down(self, event): x, y = event.GetPosition() for shape in self.shapes: if x >= shape.x and x <= shape.x + shape.width and y >= shape.y and y <= shape.y + shape.height: self.selected_shape = shape self.dragging = True self.offset = (x - shape.x, y - shape.y) break def on_left_up(self, event): if self.dragging: self.dragging = False def on_motion(self, event): if self.dragging: x, y = event.GetPosition() self.selected_shape.x = x - self.offset[0] self.selected_shape.y = y - self.offset[1] self.Refresh() def add_shape(self, shape): self.shapes.append(shape) self.Refresh() def add_connector(self, connector): self.connectors.append(connector) self.Refresh() class MyApp(wx.App): def OnInit(self): frame = MyFrame() frame.Show() return True if __name__ == '__main__': app = MyApp() app.MainLoop()
Shape和Connector是表示形状和连接器的两个类。MyFrame类是应用程序的主框架。它有一个形状和连接器的列表,一个用于跟踪当前所选形状的selected_shape变量,一个用于指示用户是否正在拖动形状的拖动标志,和跟踪鼠标光标与所选形状的左上角之间的偏移的偏移变量。on_paint方法负责绘制屏幕上的形状和连接器,它使用wx.PaintDC类绘制颜色和大小正确的形状,并使用DrawLine方法绘制形状之间的连接器。on_left_down、on_left_up和on_motion方法处理鼠标
2条答案
按热度按时间gorkyyrv1#
此链接可能会有帮助(DragImage演示文件):
https://github.com/wxWidgets/wxPython-Classic/blob/master/demo/DragImage.py
dnph8jn42#
当然,这里有一个例子,说明如何在wxPython中创建一个拖放应用程序,在形状之间使用连接器和线条:
Shape和Connector是表示形状和连接器的两个类。MyFrame类是应用程序的主框架。它有一个形状和连接器的列表,一个用于跟踪当前所选形状的selected_shape变量,一个用于指示用户是否正在拖动形状的拖动标志,和跟踪鼠标光标与所选形状的左上角之间的偏移的偏移变量。
on_paint方法负责绘制屏幕上的形状和连接器,它使用wx.PaintDC类绘制颜色和大小正确的形状,并使用DrawLine方法绘制形状之间的连接器。
on_left_down、on_left_up和on_motion方法处理鼠标