带有Gtk3的Python未正确设置unicode

带有Gtk3的Python未正确设置unicode,unicode,python-3.x,clipboard,gtk3,Unicode,Python 3.x,Clipboard,Gtk3,我有一些简单的代码没有按预期工作。首先,文档说Gtk.Clipboard.get(Gdk.SELECTION_PRIMARY).set_text()应该只能接受一个带有length参数选项的参数,但它不起作用(见下文)。最后,粘贴unicode°符号会在尝试从剪贴板检索文本时中断文本设置(并且不会粘贴到其他程序中)。它给出了以下警告: Gdk警告**:从UTF8\U字符串转换选择时出错 >>从gi.repository.Gtk导入剪贴板 >>>从gi.repository.Gdk导入选择_PRI

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

Gdk警告**:从UTF8\U字符串转换选择时出错

>>从gi.repository.Gtk导入剪贴板
>>>从gi.repository.Gdk导入选择_PRIMARY
>>>d='\u00B0'
>>>印刷品(d)
°
>>>cb=剪贴板
剪贴板
>>>cb=剪贴板.get(选择\主)
>>>cb.set_text(d)#这应该可以工作
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
cb.set_文本(d)
文件“/usr/lib/python3/dist packages/gi/types.py”,第43行,在函数中
返回信息。调用(*args,**kwargs)
TypeError:set_text()正好接受3个参数(给定2个)
>>>cb.set_文本(d,len(d))
>>>cb.等待文本()
(:13153):Gdk警告**:从UTF8\U字符串转换选择时出错
'\\Uffffffff\\uffffffffff'

来自
Gtk.Clipboard

方法
set\u text
似乎需要第二个参数。第一个是文本,第二个是文本的长度。或者,如果不想提供长度,可以使用-1让它自己计算长度

gtk.Clipboard.set_文本

def set_text(text, len=-1) 
文本:一个字符串

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


我已经在Python3上测试了它,它可以与Python3.4中的
cb.set\u text(d,-1)

一起使用。这仅适用于GtkEntryBuffers。如果是GtkTextBuffer
set_text
则不使用第二个参数

示例1正常工作:

settinginfo = 'serveradres = ' + server + '\n poortnummer = ' + poort
GtkTextBuffer2.set_text(settinginfo)
示例2需要额外的参数len:

ErrorTextDate = 'choose earlier date'
GtkEntryBuffer1.set_text(ErrorTextDate, -1)

在检查我的代码后,我发现额外的参数仅用于空的textbuffers。如果缓冲区预先填充了初始文本,则不要求使用len参数。当使用Glade和pr在指定的textblock中填充文本构建GUI时,就是这种情况。
ErrorTextDate = 'choose earlier date'
GtkEntryBuffer1.set_text(ErrorTextDate, -1)