【问题标题】:How source object can receive feedback information of object at dropping moment (DataSource)?源对象如何在丢弃时刻(DataSource)接收对象的反馈信息?
【发布时间】:2011-10-06 12:35:22
【问题描述】:

我有一个窗口 - EditWindow(类的对象,继承 wx.Frame),其中包含 Grid 对象(self.grid)。 在这个类中我写了这个方法:

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 如何接收这些信息? 对不起我的英语不好。

【问题讨论】:

    标签: python drag-and-drop wxpython wxwidgets


    【解决方案1】:

    您可以使用 pubsub 将数据发送到 EditorWindow,然后显示它。仅在 OnDropText 方法中进行发送,以便它仅在您在拖动结束时实际放下时发送。这是一个关于 pubsub 的简单教程,可以帮助您入门:http://www.blog.pythonlibrary.org/2010/06/27/wxpython-and-pubsub-a-simple-tutorial/

    【讨论】:

    • 正如 ravenspoint 所指出的,这个解决方案只有在你在应用程序中拖动某些东西时才有效,我认为这就是你所说的你想要做的。如果您要拖到应用程序之外,那么我知道没有办法做到这一点。
    【解决方案2】:

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

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

    对吗?

    一般来说,这是无法做到的。正如名称所暗示的那样,信息流是从源到目的地。

    但是,如果源和目标在同一个正在运行的应用程序中,您可以通过让目标调用源中的方法来“伪造”它,在放置完成时将所需信息从目标传递给源.

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

    【讨论】:

      猜你喜欢
      • 2020-01-17
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      相关资源
      最近更新 更多