Tkinter 文本 selection_get() 错误

5 投票
2 回答
5856 浏览
提问于 2025-04-16 23:46

我现在正在做一个Tkinter的应用程序,主要使用一个文本小部件(TextWidget)。

当我尝试获取当前选中的内容时,出现了一个错误,但我不知道为什么会这样……

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "C:\Users\Lina\Documents\Programmation\VPE project.py", line 502, in rechercher
    texte=code_text.selection_get()
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 626, in selection_get
    return self.tk.call(('selection', 'get') + self._options(kw))
TclError: PRIMARY selection doesn't exist or form "STRING" not defined

谢谢。

补充:我知道为什么之前不行了,我把快捷键绑定到了Ctrl-F,但在文本小部件中,这个快捷键已经被默认绑定了(它的功能和左箭头键是一样的)。现在的问题是,我该怎么去掉这个绑定呢?

2 个回答

0

我在文本框里选择空白区域时遇到了一个错误。为了避免这个错误,我使用了re.search来检查选中的内容是否有文本。

word = text.selection_get()
if re.search(r'\w+', word):
       some_action()
8

这个错误信息其实是在告诉你没有选中任何东西。它并不是一个真正的错误,只是在说“没有东西可以获取”。这可能是真的,或者你可能选中了东西,但它没有被导出到“选中项”中。如果你在小部件上把 exportselection 选项设置为真,那么你选中的任何内容 应该 被复制到选中项里。如果没有,那你的问题中代码不够多,无法判断原因。

不过,关于“我怎么获取小部件中选中的文本”的问题:在文本小部件中选中的文本会有一个标签叫 'sel'。你可以用 textwidget.get('sel.first', 'sel.last') 来获取这个文本。

使用带标签的 get 方法比使用 selection_get 更准确,因为在小部件中可能什么都没有被选中,但 selection_get 仍然可能返回一些东西(比如返回其他小部件导出的选中项)。

撰写回答