Chciałbym móc uzyskać ciąg z podświetloną część tekstu, jak mam to zrobić?Jak uzyskać zaznaczony ciąg z pola tekstowego Tkinter?
Odpowiedz
Dla widget Tkinter.Text
lub Tkinter.Entry
, można użyć:
content = text.selection_get()
Interaktywny przykład uzyskiwanie zaznaczony tekst zarówno z wpisem i od A widgetów tekst w konsoli Pythona:
>>> 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'
>>>
Według do komentarza Bryana Oakley'a:
selection_get
to ogólna metoda widgetu dostępna dla wszystkich widgetów. To nie nie zawsze uzyskać wybrany ciąg z widżetu tekstu. Może, ale nie jest to gwarantowane. Robi to, co się nazywa wyborem "X" (z korzeni X11 tk). Jeśli ustawiszexportselection
na False dla widżetu Tekst,selection_get
nie zadziała. Twoja propozycja będzie działać w normalnym przypadku, ale nie we wszystkich przypadkach.
użyć metody get
. Jeśli chcesz, aby wybrany tekst korzystał z indeksów SEL_FIRST
i SEL_LAST
.
[edytuj]] jeden z komentarzy spekulowanych, że to nie działało z Tkinter ponieważ nie było atrybutu "sel". "sel" nie jest atrybutem, jest tagiem. Znaczniki są niezwykle potężną funkcją widżetu tekstowego.
Oto przykład:
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()
Do tego demo do pracy, należy wpisać tekst w polu tekstowym, a następnie naciśnij przycisk.
nie widzę takiego „SEL” atrybut tekst lub widżety wejście - może odnosisz się do metod dostępnych z TCL, ale które są pakowane pod inną nazwą w Pythonie? – jsbueno
@jsbueno: 'sel' nie jest atrybutem. Jest to tag tekstowy, który reprezentuje wybór i jest dostępny pod Tkinter. –
Nie ma potrzeby używania ciągu podstawowego zdefiniowanego przez Tk. 'Tkinter' ma zmienną zdefiniowaną dla dostępu do niego -' SEL_FIRST' i 'SEL_LAST'. – ArtOfWarfare
widget Tekst ma specjalny znacznik o nazwie „SEL”, dostępną poprzez Tkinter.SEL i dającej się przetestować poprzez text_widget.tag_ranges (Tkinter.SEL), która pozwala odzyskać „wybrane” tekst. Oto prosty przykład:
if textWidget.tag_ranges(Tkinter.SEL):
print('SELECTED Text is %r' % textWidget.get(Tkinter.SEL_FIRST, Tkinter.SEL_LAST))
else:
print('NO Selected Text')
Jeśli chcesz nieco bardziej zaawansowane rozwiązania, można też spróbować:
ranges = textWidget.tag_ranges(Tkinter.SEL)
if ranges:
print('SELECTED Text is %r' % textWidget.get(*ranges))
else:
print('NO Selected Text')
Plus1 do sprawdzania, czy istnieje jakiś wybrany tekst na początek. W przeciwnym razie SEL_FIRST/LAST będzie błąd :-) –
- 1. Jak uzyskać zaznaczony tekst z obszaru tekstowego w jquery?
- 2. Python Tkinter - Jak wstawić tekst na początku pola tekstowego?
- 3. Jak uzyskać wartość pola tekstowego z HTML Coded String
- 4. Jak uzyskać wartość pola tekstowego w React?
- 5. Jak uzyskać zaznaczony element pola kombi na zmienną łańcuchową wC#
- 6. Jak uzyskać wpisany tekst z pola tekstowego w selen
- 7. Jak uzyskać zaznaczony tekst z AccessibilityNodeInfo
- 8. Jak usunąć fokus z pola tekstowego?
- 9. uzyskać wartość z pola tekstowego w ramach repeatera asp.net C#
- 10. Jak uzyskać zaznaczony zakres tekstu z UITextView lub UITextField
- 11. Jak uzyskać i ustawić aktualną pozycję kursora pola tekstowego WPF
- 12. Jak zmienić wysokość pola tekstowego?
- 13. jak zmniejszyć szerokość pola tekstowego?
- 14. Jak uzyskać klawiaturę, aby przejść do następnego pola tekstowego
- 15. Zmiana pola tekstowego z innej klasy
- 16. Blokowanie szerokości pola tekstowego
- 17. sprawdzanie długości pola tekstowego
- 18. Wykładanie pola tekstowego
- 19. Wysokość wprowadzania pola tekstowego
- 20. Selen: usuń zawartość z pola tekstowego
- 21. Pola wstępnie wypełnionego pola tekstowego WebView
- 22. Wiązanie dynamicznego pola tekstowego z listą
- 23. jak uzyskać zaznaczony tekst z elementu iframe za pomocą javascript?
- 24. Jak nie wyświetlać obszaru div, gdy zaznaczony przycisk pola wyboru nie jest zaznaczony?
- 25. filtr wartości danych wpf z pola tekstowego
- 26. Uzyskiwanie wartości wejściowych z pola tekstowego
- 27. Jak ustawić wartość pola tekstowego w Dart?
- 28. jak ustawić wartość dla pola tekstowego extjs?
- 29. Jak dodać ograniczenie długości do pola tekstowego
- 30. Jak zmienić długość pola tekstowego w szynach?
Widżet Tekst nie ma metody "selection_get". –
@BryanOakley: Którą wersję używasz? Używam Tkintera, który jest dostarczany z Pythonem 2.7, a moje widżety tekstowe zdecydowanie mają 'selection_get'. (Po prostu spróbowałem ponownie w sekcji konsoli, żeby się upewnić i zadziałało). – jsbueno
Powinienem być dokładniejszy: sam widżet tekstowy nie ma metody "selection_get". 'selection_get' to ogólna metoda widgetu dostępna dla wszystkich widgetów. To _nie_ pobiera wybrany ciąg z widżetu tekstowego. Może, ale nie jest to gwarantowane. Robi to, co się nazywa wyborem "X" (z korzeni X11 tk). Jeśli ustawisz 'exportselection' na False dla widżetu tekstowego,' selection_get' nie zadziała. Twoja propozycja będzie działać w normalnym przypadku, ale nie we wszystkich przypadkach. –