Search code examples
pythonwindowslabeltkinterunderline

Underline Text in Tkinter Label widget?


I am working on a project that requires me to underline some text in a Tkinter Label widget. I know that the underline method can be used, but I can only seem to get it to underline 1 character of the widget, based on the argument. i.e.

p = Label(root, text=" Test Label", bg='blue', fg='white', underline=0)

change underline to 0, and it underlines the first character, 1 the second etc

I need to be able to underline all the text in the widget, I'm sure this is possible, but how?

I am using Python 2.6 on Windows 7.


Solution

  • To underline all the text in a label widget you'll need to create a new font that has the underline attribute set to True. Here's an example:

    try:
        import Tkinter as tk
        import tkFont
    except ModuleNotFoundError:  # Python 3
        import tkinter as tk
        import tkinter.font as tkFont
    
    class App:
        def __init__(self):
            self.root = tk.Tk()
            self.count = 0
            l = tk.Label(text="Hello, world")
            l.pack()
            # clone the font, set the underline attribute,
            # and assign it to our widget
            f = tkFont.Font(l, l.cget("font"))
            f.configure(underline = True)
            l.configure(font=f)
            self.root.mainloop()
    
    
    if __name__ == "__main__":
        app = App()