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

标签 python wxpython clipboard

在 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 上。你在做什么?此代码对您有用吗?

关于python - Clipboard.Flush() 在 wxpython 应用程序中总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10675023/

相关文章:

Python OOP对象打印属性问题

python - 这个 for 循环如何处理以下字符串?

python - 系统托盘应用程序如何在其他平台上完成?

android - 在android中剪切、复制、粘贴

javascript - 如何将 Clipboard.js 值保存到字符串

python - 从导入的模块覆盖导入模块的内置函数

python - 不断重绘wxPython元素

python - 在 linux 中从 python 显示 pdf、ps 或 dvi 文件的最简单方法

c# - 将剪贴板内容存储到字节数组?

python - 通过多列中的非唯一值比较两个 csv 文件,输出到匹配的 csv 额外数据