Me gustaría poder sacar una cadena de una porción de texto resaltada, ¿cómo hago esto?¿Cómo obtengo una cadena seleccionada de un cuadro de texto de Tkinter?
Respuesta
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 estableceexportselection
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.
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.
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
@jsbueno: 'sel' no es un atributo. Es una etiqueta de texto que representa la selección, y está disponible en Tkinter. –
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
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')
Plus1 para verificar si hay algún texto seleccionado para comenzar. De lo contrario, SEL_FIRST/LAST tendrá error :-) –
- 1. Tkinter askquestion cuadro de diálogo
- 2. Cómo leer el texto de un texto Tkinter Widget
- 3. Cómo resaltar texto en un widget de texto tkinter
- 4. ¿Cómo crear un cuadro de mensaje con tkinter?
- 5. ¿Por qué cambia el tamaño del marco de Tkinter cuando se agrega un cuadro de texto?
- 6. ¿Cómo obtengo una devolución de llamada de evento cuando se modifica un widget de entrada Tkinter?
- 7. cuadro de lista desplazable dentro de una cuadrícula usando tkinter
- 8. C# obtener una cadena del cuadro de texto
- 9. ¿Cómo obtengo un cuadro combinado extjs para que funcione como un cuadro normal de selección html?
- 10. Cómo crear un combo box o un cuadro de texto de autocompletar para filtrar el texto que contiene una cadena
- 11. PHP: ¿Cómo obtengo los índices de cadena de un preg_match_all?
- 12. cómo insertar una imagen en un cuadro de texto
- 13. Tkinter - Cómo crear un cuadro combinado con autocompletado
- 14. Cómo obtener un cuadro de texto enriquecido WPF en una cadena
- 15. Anular la selección de texto en un cuadro de texto
- 16. Activar/desactivar de cuadro de texto en la opción seleccionada en el menú desplegable
- 17. ¿Cómo guardo un cuadro de texto multilínea como una línea en un archivo de texto?
- 18. El uso de un cuadro de texto HTML en lugar de un cuadro de texto ASP.NET
- 19. MVVM- ¿Cómo puedo seleccionar texto en un cuadro de texto?
- 20. Cómo obtengo un DataRow de una fila en un DataGridView
- 21. Valor de cuadro de texto de ActiveX
- 22. ¿Cómo convertir una cadena a mayúscula en el cuadro de texto de Windows?
- 23. Cuadro de texto árabe
- 24. Creando un cuadro de texto WPF Control como el cuadro de texto del destinatario de Outlook
- 25. BackgroundColor de un cuadro de texto deshabilitado
- 26. ¿Cómo obtengo los contenidos de texto de un área de texto con webdriver?
- 27. Insertar texto en el cuadro de texto de otra aplicación
- 28. ¿Cómo obtener el valor del cuadro de texto desde un HTML con código de cadena
- 29. Leer cadena xml en cuadro de texto con nueva línea
- 30. ¿Cómo obtengo una parte de una cadena en C++?
El widget de texto no tiene un método 'selection_get'. –
@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
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. –