有没有办法计算文本小部件的行数和列数(假设所使用的字体对所有字符都有固定的尺寸)?我想在Text小部件中加载和显示二进制文件,但文件可能非常大,在这种情况下,小部件使用大量内存。所以我想在bytearray中加载数据然后只显示相应的部分(这将由滚动条的滑块位置确定),但为此我需要知道在窗口小部件中可以容纳多少行文本(I' m实际上只对行数感兴趣,因为在我的情况下每行包含固定数量的字符)。怎么可以实现呢?
(或者如果对这个特定问题有另一种解决方案,我很高兴听到它。)
答案 0 :(得分:2)
所以最后我找到了解决问题的方法。通过测量字体高度(以像素为单位)并将其除以Text
的高度,可以找到Text
中可显示的近似行数。它并不是绝对准确的(我认为这个值也受到文本开头/结尾处的线条和/或间距之间的间距或类似的东西的影响)但我还没有进一步研究它,因为只是这个简单的解决方案有效完全符合我的需要。
这是一个示例代码,以防万一有人需要在将来解决类似的问题。只需运行它,然后调整窗口大小,您就会看到可见行数将如何变化。
# Text widget lines (rows) count example - tested in Python 3.3.2
from tkinter import Text, font as f
class ExampleApp:
def __init__(self, parent):
font = f.Font(family="courier", size=12)
self.line_height = font.metrics("linespace")
self.text = Text(parent, width=70, height=20, font=font)
self.text.pack(fill=BOTH, expand=Y)
self.text.bind("<Configure>", self.linecount)
def linecount(self, *args):
num_lines = int(self.text.winfo_height() / self.line_height)
self.text.delete(0.0, END)
self.text.insert(0.0,
"Approximate number of visible lines: %d" % num_lines)
root = Tk()
root.title("Text widget line count example")
app = ExampleApp(root)
root.mainloop()
答案 1 :(得分:-1)
使用文本小部件的索引方法,如:
endline, endcolumn = text.index('end').split('.')
此函数以line.charnumber形式返回元组。