2011-10-06 17 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

讓我們看看我是否理解這個問題。

您有一個「拖放」源窗口和一個「拖放」目標窗口。當用戶執行拖放操作時,您希望將某些信息從目標窗口傳遞到源窗口。

這是正確的嗎?

一般來說,這是不能做到的。正如名稱所示,信息流從源頭到目的地。但是,如果源和目標位於同一個正在運行的應用程序中,則可以通過讓源目標在源中調用一個方法,將所需的信息從目標傳遞到源,從而將其「假」完成。

如果你這樣做,你應該確保只有一個應用程序的實例可以運行,否則如果用戶在應用程序的兩個副本之間拖動和拖放,就會導致混亂。