如何从Tkinter文本框获取选中字符串?

18 投票
3 回答
27742 浏览
提问于 2025-04-16 06:24

我想从一段高亮的文本中提取出一个字符串,我该怎么做呢?

3 个回答

9

使用 get 方法。如果你想获取选中的文本,可以用 SEL_FIRSTSEL_LAST 这两个索引。

[编辑] 有人评论说这在 Tkinter 中不管用,因为没有 "sel" 这个属性。其实 "sel" 不是属性,它是一个标签。标签是文本组件中非常强大的一个功能。

下面是一个例子:

import Tkinter as tk
import tkFont

class App:
    def __init__(self):
        root=tk.Tk()
        self.text = tk.Text(root)
        self.text.pack()
        self.button = tk.Button(root, text="Get Selection", command=self.OnButton)
        self.button.pack()
        root.mainloop()

    def OnButton(self):
        print "selected text: '%s'" % self.text.get(tk.SEL_FIRST, tk.SEL_LAST)


app=App()

为了让这个演示有效,请在文本框中输入一些文字,然后按下按钮。

15

Text小部件有一个特别的标签,叫做'sel',你可以通过Tkinter.SEL来访问它,并且可以用text_widget.tag_ranges(Tkinter.SEL)来检查这个标签。这让你可以获取“选中的”文本。下面是一个简单的例子:

if textWidget.tag_ranges(Tkinter.SEL):
    print('SELECTED Text is %r' % textWidget.get(Tkinter.SEL_FIRST, Tkinter.SEL_LAST))
else:
    print('NO Selected Text')

如果你想要一个稍微复杂一点的解决方案,你也可以试试:

ranges = textWidget.tag_ranges(Tkinter.SEL)
if ranges:
    print('SELECTED Text is %r' % textWidget.get(*ranges))
else:
    print('NO Selected Text')
20

对于 Tkinter.TextTkinter.Entry 这两种控件,你可以使用:

content = text.selection_get()

下面是一个互动示例,展示如何在 Python 控制台中获取从 Entry 和 Text 控件中选中的文本:

>>> import Tkinter
>>> w = Tkinter.Tk()
>>> e = Tkinter.Entry(w)
>>> e.pack()
>>> t = Tkinter.Text(w)
>>> t.pack()
#(scribble at the widgets in the created window, and select text in the Entry)
>>> e.selection_get()
'1234'
#(select text)
>>> t.selection_get()
'1234'
>>>

根据 Bryan Oakley 的评论:

selection_get 是一个通用的方法,可以在所有控件中使用。它并不总是能从 Text 控件中获取选中的字符串。虽然有可能获取到,但并不能保证。它实际上是获取所谓的 "X" 选择(这个是来自 tk 的 X11 系统)。如果你把 exportselection 设置为 False,selection_get 就无法正常工作。所以你的建议在一般情况下是有效的,但并不是在所有情况下都适用。

撰写回答