Mi piacerebbe essere in grado di ottenere una stringa da una parte evidenziata del testo, come faccio a fare questo?Come posso ottenere una stringa selezionata da una casella di testo Tkinter?
risposta
Per un widget Tkinter.Text
o Tkinter.Entry
, è possibile utilizzare:
content = text.selection_get()
esempio interattivo di ottenere il testo selezionato sia da una voce e da un widget di testo nella console 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'
>>>
Secondo a commento di Bryan Oakley:
selection_get
è un metodo widget generico disponibile per tutti i widget. È non sempre ottenere la stringa selezionata da un widget di testo. Potrebbe, ma non è garantito. Quello che fa è ottenere la cosiddetta selezione "X" (dalle radici X11 di tk). Se si impostaexportselection
su False per il widget Testo,selection_get
non funzionerà. Quindi il tuo suggerimento funzionerà nel caso normale, ma non in tutti i casi.
utilizzare il metodo get
. Se vuoi che il testo selezionato usi gli indici SEL_FIRST
e SEL_LAST
.
[modifica]] uno dei commenti ha speculato che questo non ha funzionato con Tkinter perché non c'era nessun attributo "sel". "sel" non è un attributo, è un tag. I tag sono una funzionalità straordinariamente potente del widget di testo.
Ecco un esempio:
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()
Per questa demo al lavoro, digitare il testo nella casella di testo e premere il pulsante.
non vedo come attributo "SEL" nel testo o widget Entry - forse ti riferisci a metodi disponibili da TCL, ma che sono racchiusi con un altro nome in Python? – jsbueno
@jsbueno: 'sel' non è un attributo. È un tag di testo che rappresenta la selezione ed è disponibile sotto Tkinter. –
Non è necessario utilizzare la stringa sottostante definita da Tk. 'Tkinter' ha una variabile definita per accedervi -' SEL_FIRST' e 'SEL_LAST'. – ArtOfWarfare
Il widget di testo ha un tag speciale chiamato 'sel', accessibile tramite Tkinter.SEL e verificabile tramite text_widget.tag_ranges (Tkinter.SEL), che consente di recuperare il testo "selezionato". Ecco un semplice esempio:
if textWidget.tag_ranges(Tkinter.SEL):
print('SELECTED Text is %r' % textWidget.get(Tkinter.SEL_FIRST, Tkinter.SEL_LAST))
else:
print('NO Selected Text')
Se si desidera una soluzione leggermente più avanzato, si può anche provare:
ranges = textWidget.tag_ranges(Tkinter.SEL)
if ranges:
print('SELECTED Text is %r' % textWidget.get(*ranges))
else:
print('NO Selected Text')
Plus1 per verificare se è presente un testo selezionato per iniziare. Altrimenti SEL_FIRST/LAST errore :-) –
- 1. Come ottenere la linea selezionata in una casella di testo?
- 2. Come posso ottenere la cornice di testo selezionata da UITextView
- 3. Come ottenere un CGPoint da una posizione selezionata?
- 4. Come posso ottenere il nome di una collectionviewcell selezionata?
- 5. Trova se una casella di testo è attualmente selezionata
- 6. Come ottenere una casella di testo Rich WPF in una stringa
- 7. Come ottenere il valore della casella di testo da una stringa HTML Coded
- 8. Ottenere testo da asp: casella di testo
- 9. Ottenere il testo selezionato in una casella di testo
- 10. Come posso associare una casella di elenco a contenuti selezionati in una casella di testo?
- 11. Come inserire testo da una casella di testo in selenio
- 12. Come posso ottenere l'ultima cartella da una stringa di percorso?
- 13. Come posso ottenere una cornice con una barra di scorrimento in Tkinter?
- 14. C# ottiene una stringa dalla casella di testo
- 15. Come posso ottenere una parte di una stringa in C++?
- 16. Come determinare se una casella di controllo è selezionata?
- 17. Come posso creare una casella di testo scorrevole?
- 18. Visualizzare un campo di testo dopo che una casella di controllo è selezionata in visualforce
- 19. Come posso ottenere il testo da UITextField in una NSString?
- 20. Come posso ottenere i bit da una stringa in C#?
- 21. Deseleziona il testo in una casella di testo
- 22. Come accedere a una casella di testo HTML da javascript?
- 23. Come deselezionare una casella di controllo Android selezionata
- 24. Ottenere stringhe da una casella TextCtrl
- 25. Come cancellare una casella di testo onfocus?
- 26. Come ottenere una stringa da dataPackageView.GetDataAsync()
- 27. Come posso selezionare più segmenti di testo in una casella di testo WPF?
- 28. Come posso disegnare una casella attorno al testo con SVG?
- 29. Come ottenere una risposta stringa da Retrofit2?
- 30. Tkinter - Come creare una casella combinata con completamento automatico
Il widget Testo non ha un metodo 'selection_get'. –
@BryanOakley: quale versione stai usando? Sto usando Tkinter fornito con Python 2.7, ei miei widget di testo hanno sicuramente un 'selection_get'. (Ho appena provato di nuovo in una sezione della console solo per essere sicuro e ha funzionato). – jsbueno
Avrei dovuto essere più preciso: il widget di testo non ha un metodo 'selection_get'. 'selection_get' è un metodo widget generico disponibile per tutti i widget. Non _non_ ottiene la stringa selezionata da un widget di testo. Potrebbe, ma non è garantito. Quello che fa è ottenere la cosiddetta selezione "X" (dalle radici X11 di tk). Se si imposta 'exportselection' su False per il widget di testo,' selection_get' non funzionerà. Quindi il tuo suggerimento funzionerà nel caso normale, ma non in tutti i casi. –