我有一个tkinter Text小部件,可以包含可变长度的文本。 (特别是:歌曲的歌词和和弦)如果文本太长,我希望它创建一个新的列,同样,如果列的宽度太大,我希望它减小字体的大小。我不惜一切代价避免使用滚动条。
是否可以检测文本大小是否超过了文本小部件的垂直或水平大小?
答案 0 :(得分:0)
在不带参数的情况下调用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()