2010-11-01 4 views

Respuesta

7

Para un widget Tkinter.Text o Tkinter.Entry, puede utilizar:

content = text.selection_get() 

ejemplo interactivo de ser elegida de texto, tanto a partir de una entrada y desde un widget de texto en la consola de 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' 
>>> 

acuerdo al comentario de Bryan Oakley:

selection_get es un método de widget genérico disponible para todos los widgets. Sí no siempre obtiene la cadena seleccionada de un widget de Texto. Podría, pero no está garantizado. Lo que hace es obtener lo que se llama la selección "X" (de las raíces X11 de tk). Si establece exportselection en Falso para el widget de texto, selection_get no funcionará. Entonces su sugerencia funcionará en el caso normal, pero no en todos los casos.

+0

El widget de texto no tiene un método 'selection_get'. –

+0

@BryanOakley: ¿Qué versión estás usando? Estoy usando Tkinter que se envía con Python 2.7, y mis widgets de texto definitivamente tienen un 'selection_get'. (Lo intenté nuevamente en una sección de consola solo para estar seguro y funcionó). – jsbueno

+1

Debería haber sido más preciso: el widget de texto en sí mismo no tiene un método 'selection_get'. 'selection_get' es un método de widget genérico disponible para todos los widgets. No _obtiene_ la cadena seleccionada de un widget de texto. Podría, pero no está garantizado. Lo que hace es obtener lo que se llama la selección "X" (de las raíces X11 de tk). Si configura 'exportselection' en False para el widget de texto,' selection_get' no funcionará. Entonces su sugerencia funcionará en el caso normal, pero no en todos los casos. –

6

utilice el método get. Si desea el texto seleccionado, use los índices SEL_FIRST y SEL_LAST.

[edit]] uno de los comentarios especularon que esto no funcionó con Tkinter porque no había ningún atributo "sel". "sel" no es un atributo, es una etiqueta. Las etiquetas son una característica notablemente poderosa del widget de texto.

He aquí un ejemplo:

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() 

Para esta demostración para trabajar, escriba algún texto en el cuadro de texto a continuación, pulse el botón.

+0

no veo tal atributo "SEL" en el texto o el widget Entry - ¿tal vez está refiriéndose a los métodos disponibles de TCL, pero que están envueltos bajo otro nombre en Python? – jsbueno

+0

@jsbueno: 'sel' no es un atributo. Es una etiqueta de texto que representa la selección, y está disponible en Tkinter. –

+0

No es necesario utilizar la cadena subyacente definida por Tk. 'Tkinter' tiene una variable definida para acceder a ella -' SEL_FIRST' y 'SEL_LAST'. – ArtOfWarfare

4

el widget de texto tiene una etiqueta especial llamada 'sel', accesible a través de Tkinter.SEL y comprobable a través de text_widget.tag_ranges (Tkinter.SEL), lo que le permite recuperar el texto "seleccionado". Aquí está un ejemplo sencillo:

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

Si desea una solución un poco más avanzada, también puede probar:

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

Plus1 para verificar si hay algún texto seleccionado para comenzar. De lo contrario, SEL_FIRST/LAST tendrá error :-) –

Cuestiones relacionadas