【问题标题】:wxPython Drag and Drop exit code 139 crashwxPython拖放退出代码139崩溃
【发布时间】:2013-05-25 18:58:20
【问题描述】:

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

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()

【问题讨论】:

    标签: wxpython


    【解决方案1】:

    换行试试

            ds = wx.DropSource(self)
    

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

    我能够重现您看到的崩溃,但是一旦我进行了上述更改,崩溃就消失了。

    似乎出于某种原因,wx 不喜欢将wx.StaticText 的实例(或在您的情况下为它的子类)传递给wx.DropSource 构造函数。我不确定为什么。

    我更改了您的代码,以便 Txt 派生自 wx.TextCtrl 而不是 wx.StaticText,我无法再重现该问题。我还尝试使用在http://wiki.wxpython.org/DragAndDrop 上找到的第一个示例程序,并发现如果我将放置源设置为此代码创建的StaticText 对象之一而不是TextCtrl,我可能会使其崩溃。

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

    启动拖放操作的窗口。

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

    【讨论】:

      猜你喜欢
      • 2019-04-07
      • 2021-03-07
      • 2022-07-05
      • 2013-10-01
      • 1970-01-01
      • 2017-01-20
      • 2017-11-03
      • 1970-01-01
      • 2017-12-14
      相关资源
      最近更新 更多