Как получить выбранную строку из текстового поля Tkinter?

Я хотел бы иметь возможность получить строку из выделенной части текста, как мне это сделать?

3 ответов


на Tkinter.Text или Tkinter.Entry виджет, вы можете использовать:

content = text.selection_get()

интерактивный пример получения выделенного текста как из записи, так и из текстовых виджетов в консоли Python:

>>> 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'
>>>

согласно комментарию Брайана Оукли:

selection_get - это общий метод виджетов, доступный для всех виджетов. Это не всегда получить выбранную строку из текстового виджета. Возможно, но это не гарантировано. Что он делает, так это получает то, что называется выбором" X " (из корней X11 tk). Если вы установите exportselection значение False для текстового виджета,selection_get не будет работать. Поэтому ваше предложение будет работать в обычном случае, но не во всех случаях.


использовать get метод. Если вы хотите, чтобы выбранный текст использовал индексы SEL_FIRST и SEL_LAST.

[edit]] один из комментариев предположил, что это не работает с 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()

чтобы эта демонстрация работала, введите текст в текстовое поле и нажмите кнопку.


текстовый виджет имеет специальный тег с именем "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')