python - 从 tkinter Text 小部件中删除尾随空格
问题描述
我的目标是使文本框的右边缘适合文本的末尾。这在使用时会自动发生TkFixedFont
,但是在使用时TkDefaultFont
(这是我想要使用的),末尾添加了尾随空格。这是没有尾随空格的样子,带有TkFixedFont
:
请注意,尾随空间是最小的。我想要同样的几乎没有尾随空格,但是当使用TkDefaultFont
.
以下是我的代码的最小示例:
from tkinter import *
root = Tk()
myText = 'sample text'
text = Text(root, bg='#c2d9ff',
font='TkDefaultFont',
height=1, width=len(myText)
)
text.insert(INSERT, myText)
text.place(x=0,y=0)
root.mainloop()
我已经搜索了大约两个小时,以查找与间距、尾随空格、小部件类型(例如,标签与文本等)、小部件选项等相关的所有内容,但遗憾的是一无所获。
它似乎与文本的长度成正比,我无法弄清楚。使用上面的代码,当 时myText = 'Some text goes here'
,尾随间距为:
但是当我放置更长的文本字符串时,尾随空格似乎成比例地增加:
任何有关如何删除尾随空格的建议将不胜感激!
解决方案
你看到的不是空白字符,它只是空白。实际宽度是给定字符数乘以平均大小字符中的像素数(我认为 tkinter 使用字符“0”)。在可变宽度字体中,“.” 比“W”窄,因此字符串的实际宽度取决于字符串中的字符。
换句话说,如果您的文本由窄字符(例如:“............”)组成,那么如果它由宽字符(例如:“WWWWWWWWWWW”)组成,则会有更多空白空间) 会更少。
您可以做的是使用measure
字体对象的方法计算文本的实际宽度。一旦您确切知道您的文本字符串需要多少像素,您就可以使用该信息来适当地设置文本小部件的大小。
from tkinter import *
from tkinter.font import nametofont
root = Tk()
myText = 'sample text'
font = nametofont("TkDefaultFont")
width = font.measure(myText)
text = Text(root, bg='#c2d9ff',
font='TkDefaultFont',
height=1, width=len(myText)
)
text.insert(INSERT, myText)
text.place(x=0,y=0, width=width)
root.mainloop()
请注意,当您将宽度与 一起使用时place
,它指定了小部件的整个宽度,而不仅仅是边框内的宽度。您需要调整宽度以考虑文本小部件边框和突出显示的厚度,并且可能需要调整一些其他像素以用于内部填充。
例如,如果文本本身占用 100 像素,并且文本小部件有一个 2 像素边框和一个 1 像素高亮环,则在调用place
.
推荐阅读
- mysql - 当我将数据从 servlet 存储到 mysql 数据库时,像“<”、“>”这样的字符被存储为像 u003c 这样的 unicode 格式,而不是实际的符号
- typescript - 未找到插件“建模器”。Autorest 生成 TypeScript 代理
- python - 如何正确检索从 POST 请求接收到的 XML 数据
- postman - Postman 6.7.3 - 如何使用登录用户进行授权/NTLM 身份验证?
- java - 如何为 OAUTH Spring Boot 进行模拟测试
- http - Nativescript http post失败,没有抛出异常
- python - Holoview,更改图表的样式选项
- laravel-5 - 管理员创建用户,不希望用户在管理员使用 Laravel 的默认身份验证系统注册后自动登录
- c++ - 为什么 CoCreateInstance 可以在完全相同的上下文中返回两个不同的 HRESULT?
- css - 状态更改时如何将css文件从服务器添加到角度组件