使用GTK出错

时间:2015-05-22 06:40:43

标签: python-2.7 gtk pygtk

尝试此gtk代码时:

.run

我收到此错误:

import gtk
tv = gtk.TextView()
b = tv.get_buffer()
t = "Let's check this out.\x00"
b.set_text(t)

例如,我在这里自动生成了文本。我想将该字符串放入文本缓冲区但我无法做到。帮助我解决这个问题。

3 个答案:

答案 0 :(得分:1)

我认为这是由于字符串t\x00部分)末尾的嵌入式0字节奇怪。

我认为你不能期望/要求GTK +支持GtkTextBuffer中的二进制数据,它只需要文本为UTF-8。删除虚假的0字节。

我认为Python会将字符串的长度报告为n,而GTK +中的C代码会尝试验证嵌入式'\0'的编码,并将其视为结束-of-字符串。

请注意fast_validate_len()g_utf8_validate()的实现的一部分)将其输入视为0终止,即使它也有明确的长度。

答案 1 :(得分:1)

官方g_utf8_validate documentation表示该函数会为任何NUL字节返回./a.out。这与他的名字形成对比,因为NUL字节是有效的UTF-8代码点。

在我看来,这是一个普通的错误:如果字符串应该以nul为终止,那么所有false个参数的目的是什么?无论如何,这是实际情况,在不久的将来不会改变。你应该处理它,例如从字符串中删除每个NUL字节或将其转换为另一个代码点。

答案 2 :(得分:1)

我只是假设我在上面评论中提到的是你想要做的事情。

虽然C字符串以\x00字节结尾,但是当您将字符串与其他编程语言一起使用时,您不必这样做。将C库与您选择的编程语言绑定的库可以帮到您。在这种情况下,pygtk会为你做C字符串。因此,您不必在字符串末尾有明确的\x00。摆脱它,代码应该再次工作。