将高级function添加到tkinter文本小部件

我正在研究一个简单的消息系统,并且需要将以下内容添加到Tkinter文本小部件中:

  1. 拼写检查
  2. 选项更改字体(在选定的文本上)
  3. select更改字体颜色(在选定的文本上)
  4. select更改字体大小(在选定的文本上)

我知道tkinter Text小部件能够通过标记机制使用多种字体和颜色,但我不明白如何使用这些function。

我如何使用Text小部件的function来实现这些function? 具体而言,如何更改字体系列,字体的颜色和大小,以及如何使用拼写检查来实现拼写检查,其中拼写错误的单词是用下划线或与其他文本不同的颜色标注的。

Tkinter文本小部件非常强大,但你必须自己做一些高级功能。 它没有内置的拼写检查或内置的按钮,用于粗体文本等,但它们很容易实现。 所有的功能都在小部件中,你只需要知道如何去做。

以下示例为您提供了一个切换突出显示的文本的粗体状态的按钮 – 选择一系列字符,然后单击按钮添加,然后删除粗体属性。 对于字体和颜色的扩展应该很容易。

拼写检查也很容易。 下面的例子使用/ usr / share / dict / words中的词语(这几乎可以肯定在Windows 7上不存在,所以你需要提供一个合适的单词列表)这是相当简单的,因为它只是拼写检查当你按空格键,但这只是保持例子的代码大小到一个最低水平。 在现实世界中,当你进行拼写检查时,你会希望更聪明一些。

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

1)Tk没有一个集成的拼写检查器。 您可能会对PyEnchant感兴趣。

2)3)4)没有那么困难(请忘记我以前的建议使用wxPython)。 您可以传递一个tag_config作为文本小部件插入方法的第三个参数。 它定义了这个选择的配置。

请参阅以下代码,该代码是从Scrolledtext示例改编的,并且是关于Tk的最佳参考。

 """ Some text hello """ from Tkinter import * from Tkconstants import RIGHT, LEFT, Y, BOTH from tkFont import Font from ScrolledText import ScrolledText def example(): import __main__ from Tkconstants import END stext = ScrolledText(bg='white', height=10) stext.insert(END, __main__.__doc__) f = Font(family="times", size=30, weight="bold") stext.tag_config("font", font=f) stext.insert(END, "Hello", "font") stext.pack(fill=BOTH, side=LEFT, expand=True) stext.focus_set() stext.mainloop() if __name__ == "__main__": example()