[Tkinter-discuss] Text widget incorrect 'displaylines' count

Michael Lange klappnase at web.de
Sun Aug 9 01:19:11 CEST 2015


Hi,

On Sat, 08 Aug 2015 17:59:16 +0300
Alexander Uvizhev <uvizhe at yandex.ru> wrote:

> 
> Hi,
> Recently I came across some strangeness in tkinter Text widget. I bind
> <Configure> event to it and the first time I insert text into widget
> the callback is called and reports wrong 'displaylines' count. Here is
(...)
> 
> Is it what's supposed to be or some sort of bug?

I guess something like this happens:

* the text widget is created, but initially, before it is actually drawn
onto screen, has virtually a size of  1*1 px 
* because of this the inserted 10-character text string is wrappped into
10 lines
* this is when the first <Configure> event is triggered and so it
in fact correctly reports 10 lines
* subsequent calls to insert() do not trigger a <Configure> event
* the next >cConfigure> event is triggered when the window is actually
drawn after mainloop() is called, however in your example then the
binding was already removed

I modified your example a little to illustrate what I mean, without the
unbind(); you can see then that after the window is visible the reported
lines are as expected:

###############################
import tkinter

def check(event):
    print(event.widget.winfo_width(), event.widget.winfo_height())
    print(event.widget.count('1.0', 'end', 'displaylines'))
    print()

root = tkinter.Tk()
master = tkinter.Frame(master=root)
master.pack(fill='both', expand=1)
text = tkinter.Text(master=master)
text.bind('<Configure>', check)
text.pack(fill='both', expand=1)
text.insert('1.0', "1234567890")  # first time insert
text.insert('1.0', "1234567890")  # second
master.mainloop()
##############################

Best regards

Michael

.-.. .. ...- .   .-.. --- -. --.   .- -. -..   .--. .-. --- ... .--. . .-.

A star captain's most solemn oath is that he will give his life, even
his entire crew, rather than violate the Prime Directive.
		-- Kirk, "The Omega Glory", stardate unknown


More information about the Tkinter-discuss mailing list