Skip to main content
 首页 » 编程设计

python之Clipboard.Flush() 在 wxpython 应用程序中总是失败

2025年05月04日8findumars

在 wxpython 应用程序的 EVT_CLOSE 处理程序中,我试图刷新剪贴板以使复制的文本可供其他应用程序使用。但是,Flush() 方法始终返回 false。

例子:

cp = wx.Clipboard.Get() 
print cp.Flush() 

返回:

False 

我在 Fedora 16(Gnome 3 默认自旋)上使用 python 2.7.3 并且 wx.VERSION 返回 (2, 8, 12, 0, '')

谢谢你能给我的任何帮助

更新:显然自 2009 年以来它一直是一个“已知错误”。不确定它会发生什么。如果您正在使用 WX,请添加解决方案

请您参考如下方法:

我刚刚完成了一个简单的演示应用程序的创建,并且我的工作正常。这是我的代码:

import wx 
 
######################################################################## 
class ClipboardPanel(wx.Panel): 
    """""" 
 
    #---------------------------------------------------------------------- 
    def __init__(self, parent): 
        """Constructor""" 
        wx.Panel.__init__(self, parent) 
 
        lbl = wx.StaticText(self, label="Enter text to copy to clipboard:") 
        self.text = wx.TextCtrl(self, style=wx.TE_MULTILINE) 
        copyBtn = wx.Button(self, label="Copy") 
        copyBtn.Bind(wx.EVT_BUTTON, self.onCopy) 
        copyFlushBtn = wx.Button(self, label="Copy and Flush") 
        copyFlushBtn.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(copyBtn, 0, wx.ALL|wx.CENTER, 5) 
        sizer.Add(copyFlushBtn, 0, wx.ALL|wx.CENTER, 5) 
        self.SetSizer(sizer) 
 
    #---------------------------------------------------------------------- 
    def onCopy(self, event): 
        """""" 
        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("Unable to open the clipboard", "Error") 
 
    #---------------------------------------------------------------------- 
    def onCopyAndFlush(self, event): 
        """""" 
        self.dataObj = wx.TextDataObject() 
        self.dataObj.SetText(self.text.GetValue()) 
        if wx.TheClipboard.Open(): 
            wx.TheClipboard.SetData(self.dataObj) 
            wx.TheClipboard.Flush() 
        else: 
            wx.MessageBox("Unable to open the clipboard", "Error") 
 
        self.GetParent().Close() 
 
######################################################################## 
class ClipboardFrame(wx.Frame): 
    """""" 
 
    #---------------------------------------------------------------------- 
    def __init__(self): 
        """Constructor""" 
        wx.Frame.__init__(self, None, title="Clipboard Tutorial") 
        panel = ClipboardPanel(self) 
        self.Show() 
 
 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = ClipboardFrame() 
    app.MainLoop() 

我在 Windows 7、wxPython 2.8.12 和 Python 2.6.6 上。你在做什么?此代码对您有用吗?