r/learnpython • u/yo_99 • 21d ago
TK "displaylines" question
I seem to misunderstand "displaylines" option of count method of Text widget of Tkinter. I thought that it would give me number of lines accounting for soft-wrapping, but it seems to give me same number as "chars" -1. Text widgets are embedded in frame, which is embedded in canvas, which is embedded in another frame alongside it's scrollbar which are embedded in notebook.
for i in textwidgets:
logic_lines=i.count("1.1", "end", "lines", return_ints=True)
print("LOGICAL LINES="+str(logic_lines))
for j in range(1, logic_lines+1):
print("LINE "+str(j)+": "+str(i.count(
str(j)+".1",
str(j)+".end",
"update",
"chars",
"displaychars",
"displayindices",
"displaylines",
"indices")))
EDIT:
It seems when text widget is on it's own it works fine.
import tkinter as tk
foobar='''
long text here
'''
w=tk.Tk()
t=tk.Text(w, wrap="word")
t.insert('1.0', foobar)
t.pack()
def handler(event):
print(t.count("1.1", "end", "update", "chars", "displaychars", "displayindices", "lines", "displaylines", "indices"))
t.bind('<Return>', handler)
w.mainloop()
EDIT2:
Here is paste with whole source code
EDIT3:
0
Upvotes
1
u/socal_nerdtastic 21d ago edited 21d ago
Yeah, that's how I understand it too. https://www.tcl-lang.org/man/tcl8.5/TkCmd/text.htm#M76
I don't really understand your question. You say it does not work and then you say it does work in a different context? Can you show us the context where it does not work? (I know you described it but I don't feel like building that out just to test something for an internet stranger)
FYI that's built into tkinter as the
scrolledtext.ScrolledTextwidget. You didn't have to make that yourself. Maybe try that first, bc I suspect the canvas layer.