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

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

Ответы [ 3 ]

7 голосов
/ 02 ноября 2010

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

content = text.selection_get()

Интерактивный пример получения выделенного текста как из виджета Entry, так и из виджетов Text в консоли 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 не будет работать.Таким образом, ваше предложение будет работать в обычном случае, но не во всех случаях.

6 голосов
/ 08 марта 2016

Текстовый виджет имеет специальный тег с именем «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')
6 голосов
/ 02 ноября 2010

используйте метод 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()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...