wxPython - 使用剪贴板

彩虹网

实战wxPython系列-053

wxPython - 使用剪贴板

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

一、wx.TheClipboard

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

wx.TheClipboard常用方法:

二、剪贴板使用演示

#如何使用剪贴板
import wx
class 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位图数据对象即可。

wxPython - 使用剪贴板

图1:使用剪贴板

三、本文知识点

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

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。