我有一个tkinter文本小部件,可以包含可变长度的文本。(具体而言:歌词和和弦)如果文本太长,我希望它创建一个新列;同样,如果列的宽度太大,我希望它降低字体大小。我想不惜一切代价避免滚动条。
是否有方法检测文本大小是否已超过文本小部件的垂直或水平大小?
发布于 2020-08-29 06:06:23
当没有参数调用时,xview
和yview
方法将返回一个由两个数字组成的元组,表示小部件中显示的第一个和最后一个像素位置的浮点分数。如果元组不是(0.0,1.0)
,那么部分文本是不可见的,这意味着文本超过了窗口的边界。这是tkinter用于管理滚动条的相同信息。
这里有一个小的人为的例子,它展示了一般的想法。运行代码,然后交互地调整窗口的大小。顶部的标签将根据是否符合所有数据而改变。
import tkinter as tk
def resize_text(event):
xview = event.widget.xview()
yview = event.widget.yview()
if xview != (0.0, 1.0) or yview != (0.0, 1.0):
label.configure(text="it doesn't fit")
else:
label.configure(text="it fits")
root = tk.Tk()
label = tk.Label(root, text="")
text = tk.Text(root, wrap="none", height=4, width=20)
label.pack(side="top", fill="x")
text.pack(fill="both", expand=True)
text.bind("<Configure>", resize_text)
for i in range(10):
if i % 4:
text.insert("end", f"This is line {i}\n")
else:
text.insert("end", f"This is line {i}, and it is a little bit longer\n")
root.mainloop()
https://stackoverflow.com/questions/63646756
复制相似问题