2011-10-06 18 views
0

我有一个窗口 - EditWindow(类的对象,它是继承wx.Frame),它包含Grid对象(self.grid)。 在这个类我写这个方法:源对象如何在下落时刻接收对象的反馈信息(DataSource)?

def OnSubindexGridCellLeftClick(self, event): 
     .... 
     dragSource = MyDropSource(self.grid) 
     dragSource.SetData(data) 
     dragSource.DoDragDrop() 
     event.Skip() 

和EditWindow的__init__其绑定:

self.grid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnSubindexGridCellLeftClick) 

在另一个窗口 - “VariableWindow”我有我的另一格 - “VariablesGrid”和我确定以下类:

class VariableDropTarget(wx.TextDropTarget): 
    def __init__(self, parent): 
     wx.TextDropTarget.__init__(self) 
     self.ParentWindow = parent 

    def OnDropText(self, x, y, data): 
     x, y = self.ParentWindow.VariablesGrid.CalcUnscrolledPosition(x, y) 
     .... 

在另一个窗口我设置放置目标:

self.VariablesGrid.SetDropTarget(VariableDropTarget(self)) 

当我从网格中删除光标(位于EditorWindow中)时,如何钩住对象的一些信息 - “VariablesGrid”。我想获取VariablesGrid中的数据信息以及EditWindow如何接收这些信息? 对不起我的英文不好。

回答

1

您可以使用pubsub将数据发送到EditorWindow然后显示它。只在OnDropText方法中发送,因此只有在实际拖放结束时才会发送。这里有一个关于pubsub的简单教程,可以帮助你:http://www.blog.pythonlibrary.org/2010/06/27/wxpython-and-pubsub-a-simple-tutorial/

+0

正如ravenspoint指出的那样,只有在应用程序中拖动某些东西时,此解决方案才会起作用,这正是我认为您所说的要做的事情。如果你在应用程序外部拖动,那么我无法做到这一点,我知道。 –

0

让我们看看我是否理解这个问题。

您有一个“拖放”源窗口和一个“拖放”目标窗口。当用户执行拖放操作时,您希望将某些信息从目标窗口传递到源窗口。

这是正确的吗?

一般来说,这是不能做到的。正如名称所示,信息流从源头到目的地。但是,如果源和目标位于同一个正在运行的应用程序中,则可以通过让源目标在源中调用一个方法,将所需的信息从目标传递到源,从而将其“假”完成。

如果你这样做,你应该确保只有一个应用程序的实例可以运行,否则如果用户在应用程序的两个副本之间拖动和拖放,就会导致混乱。