wxpython dataview_如何使用wxpython的DataViewCtrl拖放

我想使用拖动&拖放与wx.dataview.DataViewCtrl的组合,所以我开始尝试使用拖动&拖放来重新排序行。我无法找到任何示例如何在wxpython中正确执行此操作,但无论如何,我设法让它部分工作(请参见下文)。如何使用wxpython的DataViewCtrl拖放

不幸的是,event.GetDataObject()总是返回None在我的on_drop函数中。任何指针如何获得我在on_begin_drag中分配的DataObject?我究竟做错了什么?

在此先感谢!

设置:

ArchLinux的(64位)

python2 2.7.9-1

的wxPython 3.0.2.0-1

gtk3 3.14.8-1

gnome-shell 3.14.3-2

示例代码:

import wx

import wx.dataview

DF_PLAYLIST_SONG = wx.CustomDataFormat("playlist_song")

class MyDataViewCtrl(wx.dataview.DataViewCtrl)

def __init__(self, *args. **kwargs)

[...]

self.Bind(wx.dataview.EVT_DATAVIEW_ITEM_BEGIN_DRAG, self.on_begin_drag)

self.Bind(wx.dataview.EVT_DATAVIEW_ITEM_DROP, self.on_drop)

self.EnableDragSource(DF_PLAYLIST_SONG)

self.EnableDropTarget(DF_PLAYLIST_SONG)

[...]

def on_begin_drag(self, event):

text = self._model.GetValue(event.GetItem(), 0)

data = wx.CustomDataObject(DF_PLAYLIST_SONG)

# Need to encode, because SetData dislikes unicode

data.SetData(text.encode('utf-8'))

event.SetDataObject(data)

#data.this.disown() # Makes no difference if uncommented or not

def on_drop(self, event):

print(event.GetDataFormat()) # Returns DF_PLAYLIST_SONG

if event.GetDataFormat() == DF_PLAYLIST_SONG:

# This would be logical choice:

print(event.GetDataSize()) # Returns the size of the data, e.g 92

print(event.GetDataObject()) # Returns None (strange!)

# Some other stuff I tried

print(event.GetClientObject()) # Returns MyDataViewCtrl instance

print(event.GetEventObject()) # Returns None

print(event.GetValue()) # Returns

print(self._model.GetValue(event.GetItem(), 0)) # Returns column 0 of the row this was dropped on

print(event.GetItem()) # Returns the wx.dataview.DataViewItem this was dropped on

print(event.GetDataBuffer()) # Returns

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值