0

我有一些没有按预期工作的简单代码。首先,文档说Gtk.Clipboard.get(Gdk.SELECTION_PRIMARY).set_text()应该只能接受一个带有长度参数选项的参数,但它不起作用(见下文)。最后,粘贴 unicode°符号会在尝试从剪贴板中检索文本时中断设置文本(并且不会粘贴到其他程序中)。它给出了这个警告:

Gdk-WARNING **:从 UTF8_STRING 转换选择时出错

>>> from gi.repository.Gtk import Clipboard
>>> from gi.repository.Gdk import SELECTION_PRIMARY
>>> d='\u00B0'
>>> print(d)
°
>>> cb=Clipboard
Clipboard
>>> cb=Clipboard.get(SELECTION_PRIMARY)
>>> cb.set_text(d) #this should work
Traceback (most recent call last):
  File "<ipython-input-6-b563adc3e800>", line 1, in <module>
    cb.set_text(d)
  File "/usr/lib/python3/dist-packages/gi/types.py", line 43, in function
    return info.invoke(*args, **kwargs)
TypeError: set_text() takes exactly 3 arguments (2 given)

>>> cb.set_text(d, len(d))
>>> cb.wait_for_text()

(.:13153): Gdk-WARNING **: Error converting selection from UTF8_STRING
'\\Uffffffff\\Uffffffff'
4

3 回答 3

1

从文档中Gtk.Clipboard

看起来该方法set_text需要第二个参数。第一个是文本,第二个是文本的长度。或者,如果您不想提供长度,可以使用 -1 让它自己计算长度。

gtk.Clipboard.set_text

def set_text(text, len=-1) 

文本:一个字符串。

len :文本的长度,以字节为单位,或 -1,用于计算长度。

我已经在 Python 3 上对其进行了测试,它适用于cb.set_text(d, -1).

于 2013-04-11T18:03:22.433 回答
1

自 GTK 3.16 版以来,有一种更简单的方法来获取剪贴板。您可以使用 get_default() 方法获取它:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, GLib, Gio

display = Gdk.Display.get_default()
clipboard = Gtk.Clipboard.get_default(display)
clipboard.set_text(string, -1)

对我来说,它也没有

clipboard.store()

参考:https ://lazka.github.io/pgi-docs/Gtk-3.0/classes/Clipboard.html#Gtk.Clipboard.get_default

于 2021-06-28T14:31:39.223 回答
0

在 Python 3.4 中。这仅对 GtkEntryBuffers 是必需的。如果 GtkTextBuffer 在set_text没有第二个参数的情况下工作。

example1 照常工作:

settinginfo = 'serveradres = ' + server + '\n poortnummer = ' + poort
GtkTextBuffer2.set_text(settinginfo)

example2 需要额外的参数 len:

ErrorTextDate = 'choose earlier date'
GtkEntryBuffer1.set_text(ErrorTextDate, -1)
于 2016-07-07T09:52:38.753 回答