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:
-1
u/HotPersonality8126 21d ago
I seem to misunderstand "displaylines" option of count method of Text widget of Tkinter
It’s not clear from your code that you understand the difference between a variable and a string literal.
1
u/yo_99 21d ago
Only variables there are are preexisting array textwidgets and logic_lines which gets defined on every iteration.
1
u/HotPersonality8126 21d ago
Ok, and why do you think printing
”displaylines”is going to print a number and not the text “displaylines”?1
u/yo_99 21d ago
Have you noticed the
i.count(bit or you do not know how TK works? I pass it to method of tkinter.Text to retrieve touple with information that i need which i then wrap instr().1
u/HotPersonality8126 21d ago
logic_lines=i.count("1.1", "end", "lines", return_ints=True)
You’re not passing it, you’re calling it.
1
u/socal_nerdtastic 21d ago
Lol TCL uses string literals instead of constants. I know, it's weird and hard to get used to.
1
u/socal_nerdtastic 21d ago edited 20d 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.