如何在tkinter中设置文本小部件的宽度,以使文本小部件等于行长



这个问题让我抓狂,因为它看起来微不足道,但我已经浪费了很多时间来寻找解决方案,但仍然没有成功。我需要帮助。

假设这一行是'HelloHelloHelloHelloHello',字体是Georgia 17。如何找到一个正确的值的宽度,以获得文本小部件的宽度等于行长度?小部件的宽度,以字符为单位(不是像素!),根据当前字体大小测量。我的研究结果表明,人们问类似的问题,得到了使用字体测量方法的答案,但它不起作用…

import tkinter
import tkinter.font as tkFont
txt='HelloHelloHelloHelloHello'
root=tkinter.Tk()
t_Font = tkFont.Font(family='Georgia', size=17)
width=t_Font.measure(txt)
t=tkinter.Text(root,width=width,font=('Georgia',17))
t.insert(1.0,txt)
t.pack()

结果是荒谬的http://joxi.net/E2p1NJlT7NgjvA.jpg(与宽度=280)。实证研究表明,20是一个正确的值,但如何得到它?使用len(txt)看起来更好,但我相信应该有一个很好的解决方案。我不明白我在这里错过了什么…

如果您希望Text部件的宽度以像素为单位围绕文本的宽度,您可以将Text部件放入框架中并设置框架的大小(以像素为单位)到所需的值,然后在Text部件上使用.place()填充框架:

t_Font = tkFont.Font(family='Georgia', size=17)
width, height = t_Font.measure(txt), t_Font.metrics('linespace')
print(width, height)
lines = 20
# +4 to include the width of the border (default 1) and padding (default 1)
frame = tkinter.Frame(root, width=width+4, height=lines*height+4)
frame.pack()
# put text box inside the frame
t = tkinter.Text(frame, font=t_Font)
t.insert(1.0, txt)
t.place(relwidth=1, relheight=1) # fill the available space of the frame

相关内容

  • 没有找到相关文章

最新更新