预览模式: 普通 | 列表

wxPython in Action(173)(全文完)

18.7 本章小结

1、拖放和剪贴板事件是非常相似的,两者都使用了wx.DataObject来作为数据格式的媒介。除了可以创建自定义的格式以外,还存在着默认的数据对象,包括文本,文件和位图。在剪贴板的使用中,全局对象wx.TheClipboard管理数据的传送并代表底层系统的剪贴板。

2、对于拖放操作,拖动源和拖动到的目标一起工作来管理数据传送。拖动源事件被阻塞直到拖动到的目标作出该拖动操作是否有效的判断。

查看更多...

Tags: wxpython

分类:python | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 925

wxPython in Action(172)

18.6 创建一个多线程的wxPython应用程序

在大多数的GUI应用程序中,在应用程序的后台中长期执行一个处理过程而不干涉用户与应用程序的其它部分的交互是有好处的。允许后台处理的机制通常是产生一个线程并在该线程中长期执行一个处理过程。对于wxPython的多线程,在这一节我们有两点需要特别说明。

最重要的一点是,GUI的操作必须发生在主线程或应用程序的主循环所处的地方中。在一个单独的线程中执行GUI操作对于无法预知的程序崩溃和调试来说是一个好的办法。基于技术方面的原因,如许多Unix的GUI库不是线程安全性的,以及在微软Windows下UI对象的创建问题,wxPython没有设计它自己的发生在多线程中的事件,所以我们建议你也不要尝试。

查看更多...

Tags: wxpython

分类:python | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 667

wxPython in Action(171)

18.5 使用wx.Timer来设置定时事件

有时你需要让你的应用程序产生基于时间段的事件。要得到这个功能,你可以使用类wx.Timer。

18.5.1 产生EVT_TIMER事件

查看更多...

Tags: wxpython

分类:python | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 608

wxPython in Action(170)

18.4.2 得到自定义对象

要得到该对象,需要执行相同的基本步骤。对于从剪贴板获取,先创建相同格式的一个自定义数据对象,然后得到数据并对得到的数据进行逆pickle操作(pickle有加工的意思)。

data_object = wx.CustomDataObject("MyNiftyFormat") 

查看更多...

Tags: wxpython

分类:python | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 496

wxPython in Action(169)

18.3.2 实战释放

例18.3中的代码显示了如何创建一个框架(窗口)用以接受文件的释放。你可以通过从资源管理器或查找窗口拖动一个文件到该框架(窗口)上来测试例子代码,并观查显示在窗口中的关于文件的信息。图18.3是运行后的结果。

图18.3

查看更多...

Tags: wxpython

分类:python | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 553

wxPython in Action(168)

18.3 拖放到的目标

实现拖放到的目标的步骤基本上借鉴了实现拖放源的步骤。其中最大的区别是,实现拖放源,你可以直接使用类wx.DropSource,而对于目标,你首先必须写你的自定义的wx.DropTarget的子类。一旦你有了你的目标类,你将需要创建它的一个实例,并通过使用wx.Window的SetDropTarget(target)方法将该实例与任一
wx.Window的实例关联起来。设置了目标后,wx.Window的实例(不论它是一个窗口,一个按钮,一个文本域或其它的控件)就变成了一个有效的释放目标。为了在你的释放目标上接受数据,你也必须创建一个所需要类型的wx.DataObject对象,并使用释放目标方法SetDataObject(data)将wx.DataObject对象与释放目标关联起来。在实际释放操作前,你需要预先定义数据对象,以便该释放目标能够正确地处理格式。要从目标获取该数据对象,有一个方法GetDataObject()。下面的样板代码使得释放目标能够接受文本(仅能接受文本)。这是因为数据对象已经被设置为wx.TextDataObject的一个实例。

查看更多...

Tags: wxpython

分类:python | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 555

wxPython in Action(167)

18.1.5 传递其它格式的数据

经由剪贴板交互位图几乎与传递文本相同。你所使用的相关的数据对象子类是wx.BitmapDataObject,其get*方法和set*方法分别是GetBitmap()和SetBitmap(bitmap)。经由该数据对象与剪贴板交互的数据对象必须是wx.Bitmap类型的。

最后一个预定义的数据对象类型是wx.FileDataObject。通常该数据对象被用于拖放中(将在18.2节中讨论),例如当你将一个文件从你的资源管理器或查找窗口放置到你的应用程序上时。你可以使用该数据对象从剪贴板接受文件名数据,并且你可以使用方法GetFilenames()来从该数据对象获取文件名,该方法返回一个文件名的列表,列表中的每个文件名是已经被添加到剪贴板的文件名。你可以使用该数据对象的AddFile(file)方法来将数据放置到剪贴板上,该方法将一个文件名字符串添加到该数据对象。这里没有其它的方法用于直接处理列表,所以这就要靠你自己了。本章的稍后部份,我们将讨论如何经由剪贴板传送自定义对象,以及如何拖放对象。

查看更多...

Tags: wxpython

分类:python | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 534

wxPython in Action(166)

18.1.3 获得剪贴板中的文本数据

从剪贴板中获得文本数据也是很简单的。一旦你打开了剪贴板,你就可以调用GetData(data)方法,其中参数data是wx.DataObject的一些特定的子类的一个实例。如果剪贴板中的数据能够以与方法中的数据对象参数相一致的某种格式被输出的话,该方法的返回值则为True。这里,由于我们传递进的是一个wx.TextDataObject,那么返回值True就意味该剪贴板能够被转换到纯文本。下面是一段样例代码:

text_data = wx.TextDataObject() 

查看更多...

Tags: wxpython

分类:python | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 590