2010-10-26 11 views
0

J'ai un paragraphe d'information d'aide que je voudrais afficher dans une fenêtre avec un bouton "ok" en bas. Mon problème est le formatage ... Je veux être capable de simplement définir le paragraphe égal à une variable, puis envoyer cette variable à un widget de boîte de message. Par défaut, il formate latéralement et d'une manière très laide. Aucun conseil?Menu d'aide de Python Tkinter

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

Pouvons-nous voir votre code? Cela a probablement plus à voir avec la façon dont vous définissez la chaîne pour le paragraphe plutôt qu'avec Tkinter lui-même. –

+0

J'ai modifié le message original avec du code. Merci pour la suggestion. – thenickname

Répondre

1

Utilisez un widget texte avec des mots d'emballage, et soit définir votre chaîne avec plus de précision ou faire un peu de post-traitement pour enlever tout ce que des espaces supplémentaires. En utilisant le code de this answer le rend facile à utiliser plusieurs couleurs, polices, etc.

Par exemple:

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