0

I have a paragraph of help information that I would like to display in a window with an "ok" button at the bottom. My issue is formatting...I want to be able to simply set the paragraph equal to a variable and then send that variable to a message box widget. By default, it formats laterally and in a very ugly manner. Any advice?

def aboutF():
     win = Toplevel()
     win.title("About")
     about = "Top/bottom 3 - Reports only the top/bottom 3 rows for a param you will      later specify.\
        Set noise threshold - Filters results with deltas below the specified noise threshold in ps.\
        Sort output - Sorts by test,pre,post,unit,delta,abs(delta).\
        Top 2 IDD2P/IDD6 registers - Reports only the top 2 IDD2P/IDD6 registers.\
        Only critical registers - Reports only critical registers.\
        Use tilda output format - Converts the output file from csv to tilda.\
        Use html output format - Converts the output file from csv to html."
     Label(win, text=about, width=100, height=10).pack()
     Button(win, text='OK', command=win.destroy).pack()
2
  • 1
    Can we see your code? It probably has more to do with the way you define the string for the paragraph rather than Tkinter itself. Commented Oct 26, 2010 at 23:07
  • I've edited the original post with code. Thanks for the suggestion. Commented Oct 27, 2010 at 16:51

1 Answer 1

1

Use a text widget with word wrapping, and either define your string more accurately or do a little post-processing to remove all that extra whitespace. Using the code from this answer makes it easy to use multiple colors, fonts, etc.

For example:

import Tkinter as tk
import re

class CustomText(tk.Text):
    '''A text widget with a new method, HighlightPattern 

    example:

    text = CustomText()
    text.tag_configure("red",foreground="#ff0000")
    text.HighlightPattern("this should be red", "red")

    The HighlightPattern method is a simplified python 
    version of the tcl code at http://wiki.tcl.tk/3246
    '''
    def __init__(self, *args, **kwargs):
        tk.Text.__init__(self, *args, **kwargs)

    def HighlightPattern(self, pattern, tag, start="1.0", end="end", regexp=True):
        '''Apply the given tag to all text that matches the given pattern'''

        start = self.index(start)
        end = self.index(end)
        self.mark_set("matchStart",start)
        self.mark_set("matchEnd",end)
        self.mark_set("searchLimit", end)

        count = tk.IntVar()
        while True:
            index = self.search(pattern, "matchEnd","searchLimit",count=count, regexp=regexp)
            if index == "": break
            self.mark_set("matchStart", index)
            self.mark_set("matchEnd", "%s+%sc" % (index,count.get()))
            self.tag_add(tag, "matchStart","matchEnd")

def aboutF():
     win = tk.Toplevel()
     win.title("About")
     about = '''Top/bottom 3 - Reports only the top/bottom 3 rows for a param you will later specify.
        Set noise threshold - Filters results with deltas below the specified noise threshold in ps.
        Sort output - Sorts by test,pre,post,unit,delta,abs(delta).
        Top 2 IDD2P/IDD6 registers - Reports only the top 2 IDD2P/IDD6 registers.
        Only critical registers - Reports only critical registers.
        Use tilda output format - Converts the output file from csv to tilda.
        Use html output format - Converts the output file from csv to html.'''
     about = re.sub("\n\s*", "\n", about) # remove leading whitespace from each line
     t=CustomText(win, wrap="word", width=100, height=10, borderwidth=0)
     t.tag_configure("blue", foreground="blue")
     t.pack(sid="top",fill="both",expand=True)
     t.insert("1.0", about)
     t.HighlightPattern("^.*? - ", "blue")
     tk.Button(win, text='OK', command=win.destroy).pack()

root=tk.Tk()
aboutF()
root.mainloop()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.