2013-08-27 27 views
5

我想將一個小部件的寬度(在這種情況下是一個標籤)分配給一個變量。如何獲得tkinter小部件的寬度?

我有什麼至今:

from tkinter import * 

def getwidth(): 
    print(lbl.bbox()) 

root = Tk() 

lbl = Label(root, text="test text") 
lbl.grid(row=0) 
btn = Button(root, text="GO", command=getwidth) 
btn.grid(row=1) 

root.mainloop() 

我都會以爲,bbox()返回從左上角,寬度和高度偏差,但是,返回的值是{0, 0, 0, 0}

如果有人可以解釋這是爲什麼,以及正確實現這一點的步驟,我會非常感激。

回答

8

您應該使用bbox針對root小部件(其中調用了grid方法,而不是放入網格中的小部件)。

print(root.bbox()) 

但沒有參數,它會給根部件的邊界框。你需要指定(的lblcolumnrow說法:

print(root.bbox(0, 0)) 

如果你想獲得小部件不定位爲0/0列/行的小部件,您還需要指定col2row2說法。

grid_bbox(column=None, row=None, col2=None, row2=None) tkinter.Tk實例的方法

返回整數的元組座標此插件由幾何管理器網格控制的邊界框。

如果給出了COLUMN,ROW,則邊界框應用於具有行和列0的單元格到指定單元格。如果給出COL2和ROW2,則邊界框在該單元處開始。

返回的整數指定了主控件中左上角的偏移量以及寬度和高度。 (help(root.bbox)


或者您可以使用winfo_widthwinfo_height

def getwidth(): 
    print(lbl.winfo_width(), lbl.winfo_height()) 
+0

「如果有人可以解釋爲什麼這是」 – beauxq

+0

@beauxq,在回答問題的時候,我沒有」不知道「爲什麼這是」的一部分,所以我發佈了答案,「只有正確實現這一點的步驟是什麼」。現在我更新了答案以包含缺失部分。通過試圖回答缺失的部分,我找到了替代方法。 – falsetru

相關問題