Widżet tekstowy Tkinter ma niezwykłą moc, ale sam musisz wykonać pewne zaawansowane funkcje. Nie ma wbudowanego sprawdzania pisowni ani wbudowanych przycisków do pogrubiania tekstu itp., Ale są one dość łatwe do wdrożenia. Wszystkie możliwości są dostępne w widgecie, po prostu musisz wiedzieć, jak to zrobić.
Poniższy przykład przedstawia przycisk do przełączania pogrubionego stanu zaznaczonego tekstu - wybierz zakres znaków, a następnie kliknij przycisk, aby dodać, a następnie usunąć pogrubiony atrybut. Powinno być całkiem łatwo rozszerzyć ten przykład o czcionki i kolory.
Sprawdzanie pisowni jest również łatwe. w poniższym przykładzie użyto słów w/usr/share/dict/words (co prawie na pewno nie istnieje w systemie Windows 7, więc musisz podać odpowiednią listę słów) Jest to dość uproszczone, ponieważ sprawdza tylko pisownię po naciśnięciu klawisza spacji, ale tylko po to, aby rozmiar kodu przykładu był minimalny. W prawdziwym świecie będziesz bardziej inteligentny, gdy będziesz sprawdzać pisownię.
import Tkinter as tk
import tkFont
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
## Toolbar
self.toolbar = tk.Frame()
self.bold = tk.Button(name="toolbar", text="bold",
borderwidth=1, command=self.OnBold,)
self.bold.pack(in_=self.toolbar, side="left")
## Main part of the GUI
# I'll use a frame to contain the widget and
# scrollbar; it looks a little nicer that way...
text_frame = tk.Frame(borderwidth=1, relief="sunken")
self.text = tk.Text(wrap="word", background="white",
borderwidth=0, highlightthickness=0)
self.vsb = tk.Scrollbar(orient="vertical", borderwidth=1,
command=self.text.yview)
self.text.configure(yscrollcommand=self.vsb.set)
self.vsb.pack(in_=text_frame,side="right", fill="y", expand=False)
self.text.pack(in_=text_frame, side="left", fill="both", expand=True)
self.toolbar.pack(side="top", fill="x")
text_frame.pack(side="bottom", fill="both", expand=True)
# clone the text widget font and use it as a basis for some
# tags
bold_font = tkFont.Font(self.text, self.text.cget("font"))
bold_font.configure(weight="bold")
self.text.tag_configure("bold", font=bold_font)
self.text.tag_configure("misspelled", foreground="red", underline=True)
# set up a binding to do simple spell check. This merely
# checks the previous word when you type a space. For production
# use you'll need to be a bit more intelligent about when
# to do it.
self.text.bind("<space>", self.Spellcheck)
# initialize the spell checking dictionary. YMMV.
self._words=open("/usr/share/dict/words").read().split("\n")
def Spellcheck(self, event):
'''Spellcheck the word preceeding the insertion point'''
index = self.text.search(r'\s', "insert", backwards=True, regexp=True)
if index == "":
index ="1.0"
else:
index = self.text.index("%s+1c" % index)
word = self.text.get(index, "insert")
if word in self._words:
self.text.tag_remove("misspelled", index, "%s+%dc" % (index, len(word)))
else:
self.text.tag_add("misspelled", index, "%s+%dc" % (index, len(word)))
def OnBold(self):
'''Toggle the bold state of the selected text'''
# toggle the bold state based on the first character
# in the selected range. If bold, unbold it. If not
# bold, bold it.
current_tags = self.text.tag_names("sel.first")
if "bold" in current_tags:
# first char is bold, so unbold the range
self.text.tag_remove("bold", "sel.first", "sel.last")
else:
# first char is normal, so bold the whole selection
self.text.tag_add("bold", "sel.first", "sel.last")
if __name__ == "__main__":
app=App()
app.mainloop()
Obecnie pytanie nie wymaga ressource, a raczej realizacji, podobnie jak wszystkie inne pytania dotyczące SO. – Trilarion
Jestem zakłopotany zamknięciem z powodu wyłączenia tematu. To nie jest prośba o pomoc w znalezieniu zasobu lub narzędzia jako takiego, ale pytanie, jak coś można zaimplementować. Wprawdzie jest nieco szeroka, ale zaakceptowana odpowiedź nie dotyczy zewnętrznych narzędzi ani bibliotek, a jedynie opisuje sposób korzystania z istniejących funkcji. Myślę, że to pytanie zasługuje na ponowne otwarcie. –