龙空技术网

wxPython - 使用剪贴板

爱好史地的coder 57

前言:

目前各位老铁们对“pythonclipboard”大体比较关心,小伙伴们都需要了解一些“pythonclipboard”的相关知识。那么小编也在网摘上汇集了一些关于“pythonclipboard””的相关资讯,希望看官们能喜欢,大家一起来学习一下吧!

实战wxPython系列-053

我们在使用电脑的时候都知道可以使用复制和粘贴文本。到我们复制一些东西的时候,它会进入一个名为“剪贴板”的位置。大多数程序都提供对某种类型的剪贴板的访问,无论是在程序本身还是系统剪贴板,都允许将项目复制到其他应用程序。wxPython GUI工具包还提供了剪贴板访问,您可以使用它将文本复制到程序内部,甚至复制到系统剪贴板。我们还可以将图像复制到剪贴板。

一、wx.TheClipboard

wx.TheClipboard是用于操作剪贴板的类。要使用剪贴板,需要调用全局wx.TheClipboard对象的成员函数。在进行拷贝或者粘贴的动作之前,必须先通过wx.TheClipboard.Open获得剪贴板的控制权,如果这个函数返回成功,则表示已经获得了剪贴板的控制权,可以调用wx.TheClipboard.SetData来将数据拷贝到剪贴板上,或者调用wx.TheClipboard.GetData函数从剪贴板上获取数据。最后,需要调用wx.TheClipboard.Close函数来释放剪贴板的控制权。一旦不使用剪贴板了,应该尽快释放掉剪贴板的控制权。

wx.TheClipboard常用方法:

AddData(self, data):调用此函数将数据对象添加到剪贴板。Clear(self):如果可能,清除全局剪贴板对象和系统的剪贴板。Close(self):调用此函数关闭剪贴板,使用Open打开它。Flush(self):刷新剪贴板:这意味着即使应用程序退出(可能会消耗内存),当前剪贴板上的数据仍将保持可用,否则退出时剪贴板将被清空。static Get():返回剪贴板对象的全局实例(wx.TheClipboard)。GetData(self, data):调用此函数用剪贴板上的数据填充数据(如果所需格式可用)。成功时返回True。IsOpened(self):如果剪贴板已打开,则返回True。Open(self):调用此函数在调用SetData和GetData之前打开剪贴板。SetData(self, data):调用此函数将数据对象设置为剪贴板。新的数据对象将替换之前设置的任何数据对象,因此如果应用程序希望以几种不同的格式提供剪贴板数据,则必须使用支持所有格式的复合数据对象,而不是使用不同的数据对象多次调用此函数,因为这将只会在剪贴板中留下最后一个数据对象的数据。调用此函数后,剪贴板拥有数据,因此不要显式删除数据。

二、剪贴板使用演示

#如何使用剪贴板import wxclass SampleClipboard(wx.Frame):    def __init__(self, *args, **kw):        super(SampleClipboard, self).__init__(*args, **kw)        self.InitUi()    def InitUi(self):        self.SetTitle("实战wxPython: 如何使用剪贴板")        self.SetSize(400, 300)        panel = wx.Panel(self)        lbl = wx.StaticText(panel, label="输入复制到剪贴板的文本:")        self.text = wx.TextCtrl(panel, style = wx.TE_MULTILINE)                btnCopy = wx.Button(panel, label="复制")        btnCopy.Bind(wx.EVT_BUTTON, self.OnCopy)        btnCopyFlush = wx.Button(panel, label="复制并刷新")        btnCopyFlush.Bind(wx.EVT_BUTTON, self.OnCopyAndFlush)        sizer = wx.BoxSizer(wx.VERTICAL)        sizer.Add(lbl, 0, wx.ALL, 5)        sizer.Add(self.text, 1, wx.EXPAND)        sizer.Add(btnCopy, 0, wx.ALL|wx.CENTER, 5)        sizer.Add(btnCopyFlush, 0, wx.ALL|wx.CENTER, 5)        panel.SetSizer(sizer)        self.Centre()    def OnCopy(self, e):        self.dataObj = wx.TextDataObject()        self.dataObj.SetText(self.text.GetValue())        if wx.TheClipboard.Open():            wx.TheClipboard.SetData(self.dataObj)            wx.TheClipboard.Close()        else:            wx.MessageBox("不能打开剪贴板", "错误")    def OnCopyAndFlush(self, e):        self.dataObj = wx.TextDataObject()        self.dataObj.SetText(self.text.GetValue())        if wx.TheClipboard.Open():            wx.TheClipboard.SetData(self.dataObj)            wx.TheClipboard.Flush()        else:            self.dataObj.SetText(self.text.GetValue())                self.Close()def main():    app = wx.App()    sample = SampleClipboard(None)    sample.Show()    app.MainLoop()if __name__ == "__main__":    main()

运行上面的代码,可以看到,在窗口的下方包含两个按钮,下面包含两个按钮,其中一个按钮复制添加到文本控件中的任何文本,然后您可以将其粘贴到其他地方,例如文本框、搜索引擎或其他地方。另一个按钮也复制到剪贴板,然后在刷新数据后关闭应用程序。可以看到即使在应用程序关闭后,数据在系统剪贴板中仍然可用。

这段代码的核心在按钮事件处理程序中。重点是wx.TextDataObject,它将存储来自文本控件的数据。接下来,尝试打开剪贴板。如果成功,我们将文本添加到剪贴板,然后关闭它。现在数据就可以粘贴了。如果我们向剪贴板复制一个位图,使用wx.BitmapDataObject位图数据对象即可。

图1:使用剪贴板

三、本文知识点

了解wxPython中的数据对象。使用wx.TheClipboard实现剪贴板功能。

前一篇:wxPython - 在程序中使用拖放

欢迎关注,评论,收藏,点赞,和转发。

标签: #pythonclipboard