wxpython中文教程之剪贴板WX.THECLIPBOARD用法

发布时间:2019-11-21编辑:脚本学堂
有关wxpython中剪贴板的用法,wxPython wx.TheClipboard 是一个用于操作剪贴板的类,本节wxpython中文教程就专门介绍下wx.TheClipboard剪贴板的使用方法,一起学习下。

wxpython 中的 wx.TheClipboard 是一个用于操作剪贴板的类. 首先我们要调用 Open() 方法来取得剪贴板的所有权.
如果成功获取,它将返回真值. 接着我们就可以通过 SetData() 方法将数据放在剪贴板上了. 同时该方法会接受一个简单的数据对象.

专题:wxpython中文教程

关于数据对象,有 3 个预定义的简单数据对象:
 

wx.FileDataObject
wx.TextDataObject
wx.BitmapDataObject

要从剪贴板中取回数据,你可以调用 GetData() 方法. 它也是接受的简单数据对象.

最后,要使用 Close() 方法来关闭剪贴板并退回其使用权.

以下 clipboard.py 示例演示了在 wxPython 中剪贴板的简单用法.

例子:
 

复制代码 代码示例:

#!/usr/bin/python
#coding=utf-8

#clipboard.py

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title,
                          wx.DefaultPosition, wx.Size(320, 300))
       
        panel1 = wx.Panel(self, -1)
        self.tc1 = wx.TextCtrl(panel1, -1, '', (50, 50), (85, -1))
        self.tc2 = wx.TextCtrl(panel1, -1, '', (180, 50), (85, -1))
        wx.Button(panel1, 1, '复 制', (50, 200))
        wx.Button(panel1, 2, '粘 贴', (180, 200))

        self.Bind(wx.EVT_BUTTON, self.OnCopy, id=1)
        self.Bind(wx.EVT_BUTTON, self.OnPaste, id=2)
        self.Center()
       
    def OnCopy(self, event):
        text = self.tc1.GetValue()
        if wx.TheClipboard.Open():
            wx.TheClipboard.Clear()
            wx.TheClipboard.SetData(wx.TextDataObject(text))
            wx.TheClipboard.Close()
           
    def OnPaste(self, event):
        if wx.TheClipboard.Open():
            td = wx.TextDataObject()
            success = wx.TheClipboard.GetData(td)
            wx.TheClipboard.Close()
            if not success:
                return
            text = td.GetText()
            if text: self.tc2.SetValue(text)     
     
class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, 'clipboard.py')
        frame.Show(True)
        self.SetTopWindow(frame)
        return True
   
app = MyApp(0)
app.MainLoop()
 

这里有两个文本控件 (textcontrol) 以及两个按钮.
输入一些文本到第一个文本控件,并用这两个按钮来把文本粘贴到第二个文本控件.

注意,如何从 wx.TextDataObject 中取出数据:
 

text = td.GetText()