PyQt 剪贴板不会复制到系统剪贴板

发布于 2024-07-26 04:01:38 字数 552 浏览 7 评论 0原文

以下代码片段似乎根本不影响系统剪贴板:

clipboard = QtGui.QApplication.clipboard()
clipboard.setText(text)

根据 Qt 文档,这就是将文本复制到剪贴板的方式,

为什么它不起作用?

谷歌搜索这个

它建议在上面的代码之后添加以下代码:

event = QtCore.QEvent(QtCore.QEvent.Clipboard)
app.sendEvent(clipboard, event)

但是这个代码的行为很奇怪:它只在程序退出后将文本复制到剪贴板。 另外,该链接中的一些人报告说这不适用于 Linux。

更新:

没关系,我在其他地方做错了,我没有将复制槽绑定到复制按钮,而是将其连接到“退出”按钮。

The following snippet of code doesn't seem to affect the system clipboard at all:

clipboard = QtGui.QApplication.clipboard()
clipboard.setText(text)

According to the Qt documentation, this is how you copy text to clipboard,

Why isn't it working?

Googling turned this up.

It suggests adding this after the above code:

event = QtCore.QEvent(QtCore.QEvent.Clipboard)
app.sendEvent(clipboard, event)

But this one behaves odd: it only copies the text to the clipboard after the program exits. Plus, some people in that link reported that this doesn't work with linux.

UPDATE:

Nevermind, I was doing something wrong else where, instead of binding the copy slot to the copy button, I connected it to the "quit" button.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

在梵高的星空下 2024-08-02 04:01:38

您可能需要指定模式

这段代码在 Windows 上对我有用:

    cb = QtGui.QApplication.clipboard()
    cb.clear(mode=cb.Clipboard )
    cb.setText("Clipboard Text", mode=cb.Clipboard)

You may need to specify the mode.

This code worked for me on windows:

    cb = QtGui.QApplication.clipboard()
    cb.clear(mode=cb.Clipboard )
    cb.setText("Clipboard Text", mode=cb.Clipboard)
醉殇 2024-08-02 04:01:38

我知道你没有使用 Windows,但这也许会给你一些想法......我在 PyQt 程序中使用它来将 URL 复制到剪贴板:

import win32clipboard

s = 'copy this to the clipboard'
try:
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText(s)
    win32clipboard.CloseClipboard()
except:
    print 'Could not copy clipboard data.'

I know you are not using Windows, but maybe this will give you some ideas... I used this in a PyQt program to copy URLs to the clipboard:

import win32clipboard

s = 'copy this to the clipboard'
try:
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText(s)
    win32clipboard.CloseClipboard()
except:
    print 'Could not copy clipboard data.'
神爱温柔 2024-08-02 04:01:38

对不起我的英语不好。 我用的是Linux。 我只写了这个命令

QApplication.clipboard().setText("This is text 2 Clipboard")

Sorry for my English. I use linux. I wrote only this command

QApplication.clipboard().setText("This is text 2 clipboard")

痴骨ら 2024-08-02 04:01:38

您可以尝试 gtk.Clipboard 来自 PyGTK。 我相信它是多平台的。

这可能是您在使用 PyQt 时遇到问题的部分原因 QClipboard 对象:

QClipboard QApplication.clipboard()

返回指向应用程序的指针
全局剪贴板。

注意:QApplication 对象应该
之前已经构建完成
访问剪贴板。

它指向应用程序剪贴板,而不是系统剪贴板。 您可能必须使用 QClipboard 对象以外的其他东西来实现您的目的。

编辑:

引用文档中的上述结论是不正确的。 根据实际的QClipboard的PyQt文档对象:

QClipboard 类提供对窗口系统剪贴板的访问。

You might try gtk.Clipboard from PyGTK. I believe it is multi-platform.

This might be part of the reason you're having trouble with PyQt's QClipboard object:

QClipboard QApplication.clipboard ()

Returns a pointer to the application
global clipboard.

Note: The QApplication object should
already be constructed before
accessing the clipboard.

It's pointing to the application clipboard, not the system clipboard. You'll probably have to use something other than the QClipboard object to achieve your end.

Edit:

The above conclusion from the cited documentation is incorrect. According to the actual PyQt documentation of the QClipboard object:

The QClipboard class provides access to the window system clipboard.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文