wxPython拖放退出代码139崩溃

时间:2013-05-25 06:13:31

标签: wxpython

我正在尝试使用wxPython来学习拖放。为什么以下不能在Linux上运行?应用程序启动,但是当我将静态文本拖到文本字段中时,我使用python 2.7获得了版本为2.8的139退出代码。

import wx
class DropTarget(wx.DropTarget):
    def __init__(self):
            wx.DropTarget.__init__(self)
            self.dataobject = wx.PyTextDataObject()
            self.SetDataObject(self.dataobject)
    def OnData(self, x, y, d):
            pass

class Txt(wx.StaticText):
    def __init__(self, parent, label_):
            wx.StaticText.__init__(self, parent, label=label_)
            self.Bind(wx.EVT_LEFT_DOWN, self.handle)
    def handle(self, event):
            ds = wx.DropSource(self)
            d = wx.PyTextDataObject('some text')
            ds.SetData(d)
            ds.DoDragDrop(True)

class MyFrame(wx.Frame):
    def __init__(self):
            wx.Frame.__init__(self, None, -1, 'whatevs')
            main_panel = wx.Panel(self)

            txt = Txt(main_panel, 'ONE')
            txt2 = wx.TextCtrl(main_panel)

            s = wx.BoxSizer(wx.VERTICAL)
            s.Add(txt)
            s.Add(txt2)
            main_panel.SetSizer(s)

            dt = DropTarget()
            txt2.SetDropTarget(dt)


if __name__ == '__main__':
    app = wx.App()
    MyFrame().Show(True)
    app.MainLoop()

1 个答案:

答案 0 :(得分:1)

尝试替换

        ds = wx.DropSource(self)

        ds = wx.DropSource(self.GetParent())

我能够重现你所看到的崩溃,但是一旦我做了上述改变,崩溃就消失了。

似乎由于某种原因,wx不喜欢将wx.StaticText(或者你的子类)的实例传递给wx.DropSource构造函数。我不知道为什么。

我更改了您的代码,以便Txtwx.TextCtrl而不是wx.StaticText派生,我无法再重现此问题。我还尝试使用http://wiki.wxpython.org/DragAndDrop上的第一个示例程序,并发现如果我将drop source设置为此代码创建的StaticText对象之一而不是{ {1}}。

如果wxWidgets或wxPython文档中有任何内容表明您无法使用TextCtrl作为放置源,我找不到它。这对我来说当然不是很明显。 (documentation for wxDropSource表示您传递给每个构造函数

  

启动拖放操作的窗口。

但是,对于可以用作放置源的“窗口”(或“窗口小部件”)的类型似乎没有任何限制。)