我的目標是讓文本框的右邊緣適合文本的末尾。使用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',尾隨間距為:

但是當我放置更長的文本字串時,尾隨空間似乎成比例地增加:

任何關于如何削減尾隨空間的建議將不勝感激!
uj5u.com熱心網友回復:
你看到的不是空白字符,它只是空白。實際寬度是給定的字符數乘以平均大小字符中的像素數(我認為 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()
請注意,當您使用寬度 with 時place,它指定了小部件的整個寬度,而不僅僅是邊框內的寬度。您需要調整寬度以考慮文本小部件邊框和突出顯示的厚度,以及內部填充的其他一些像素。
例如,如果文本本身占用 100 像素,并且文本小部件有一個 2 像素的邊框和一個 1 像素的高亮環,則在呼叫place.
uj5u.com熱心網友回復:
您可以根據結果??和其他與水平占用空間相關的設定(例如邊框寬度、padx 等)myText使用Text.dlineinfo()和調整寬度來獲取占用的區域text:
myText = 'sample text'*4
text = Text(root, bg='#c2d9ff',
font='TkDefaultFont',
height=1
)
text.insert(INSERT, myText)
text.place(x=0, y=0)
text.update_idletasks() # make sure the widget is laid out completely
x, y, w, h, _ = text.dlineinfo(INSERT)
text.place(width=x w (text['bd'] text['padx'])*2) # adjust the width
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335955.html
