我一直在与这个错误斗争一段时间,我最终认为它可能是GTK +的Python绑定方面的一个错误,因为这个代码适用于PyGTK(版本2)。
我将我的申请简化为以下摘录。它只是用一些汇编程序代码创建一个缓冲区,获取一个迭代器(它恰好在get_iter_at_location()调用之后结束)并尝试向后搜索
中的字符[' ', ',', '\t', '\n', '(', ')']
当我调用backward_find_char()时,Python大喊大叫:
** (XXXX.py:22748): WARNING **: Unhandled type tag gunichar
每个字符一次,并且不传递给GtkTextCharPredicate函数is_word_sep()。我现在怀疑它是一个缺少的标题/在类的Python定义中的任何内容(https://developer.gnome.org/gtk3/stable/GtkTextIter.html#GtkTextCharPredicate,我可以看到gunichar作为第一个参数),但我还不确定。
这是在使用gir1.2-gtksource-3.0的Debian测试中发生的3.18.1-1
import gi
gi.require_version('GtkSource', '3.0')
from gi.repository import GtkSource
def is_word_sep(x, bogus):
print('is_word_sep called with %s, %s' % (x, bogus))
word_separators = [' ', ',', '\t', '\n', '(', ')']
return x in word_separators
text = '''
; [11] va=0x00400450 pa=0x00000450 sz=80 vsz=80 rwx=-r-x .plt
|- loc.00400450 12
| 0x00400450 ff 35 32 05 20 00 push qword [rip+0x200532]
\ 0x00400456 ff 25 34 05 20 00 jmp qword [rip+0x200534]
/ (fcn) fcn.0040045c 10
| 0x0040045c 0f 1f 40 00 nop [rax]
/ (fcn) sym.imp.strlen 6
| 0x00400460 ff 25 32 05 20 00 jmp qword [rip+0x200532]
/ (fcn) fcn.00400466 16
| 0x00400466 68 00 00 00 00 push 0x0
| 0x0040046b e9 e0 ff ff ff jmp loc.00400450
'''
a = GtkSource.Buffer()
view = GtkSource.View.new_with_buffer(a)
a.set_text(text)
# Get textiter at coordinates.
start_iter = view.get_iter_at_location(10, 10)
ret = start_iter.backward_find_char(is_word_sep)
有什么想法吗?