Tkinter Text Widget Background Color

Peter Otten __peter__ at web.de
Tue Feb 22 12:14:34 EST 2011


Terry Reedy wrote:

> On 2/22/2011 6:50 AM, Peter Otten wrote:
>> import Tkinter as tk
>> from itertools import cycle
>>
>> root = tk.Tk()
>> text = tk.Text(root, font=("Helvetica", 70))
>> text.pack()
>>
>> text.insert(tk.END, "Hello, geocities")
>> text.tag_add("initial", "1.0", "1.1")
>> text.tag_add("initial", "1.7", "1.8")
>>
>> colors = cycle("red yellow blue".split())
>> initial_colors = cycle("#8f8 #f08".split())
>>
>> def switch_color():
>>      # change the complete widget's background color
>>      text["bg"] = next(colors)
>>
>>      # change the background color of tagged portions
>>      # of the widget's conten
>>      text.tag_config("initial", background=next(initial_colors))
>>
>>      # do it again after 300 milliseconds
>>      root.after(300, switch_color)
>>
>> # call the color-setting function manually the first time
>> switch_color()
>> root.mainloop()
> 
> This example is helpful to me. I am curious though why the tk window
> takes up the full screen instead of being much smaller as usual for
> other examples I run. Shortening or shrinking the text has no effect.

The text widget's intended usecase is editing text; therefore it reserves 
space for 80 columns and 24 lines by default. Combined with the giant font 
size that I specified that means that it takes a all the space it can get.
If you want to (ab)use a text widget to show its content you can specify the 
desired size in units of character cells, e. g.

text = tk.Text(root, font=("Helvetica", 70), width=16, height=1)

See also

http://www.tcl.tk/man/tcl8.5/TkCmd/text.htm#M-height

Peter



More information about the Python-list mailing list