2013-08-27 31 views
5

Tôi đang cố gán chiều rộng của tiện ích (trong trường hợp này là nhãn) cho một biến.Làm thế nào để có được chiều rộng của widget tkinter?

Những gì tôi có cho đến nay:

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() 

tôi sẽ giả định rằng bbox() lợi nhuận bù đắp từ phía trên bên trái và chiều rộng và chiều cao, tuy nhiên, giá trị trả về là {0, 0, 0, 0}.

Nếu ai đó có thể giải thích lý do tại sao điều này và bước nào để đạt được điều này một cách chính xác, tôi sẽ rất tuyệt vời.

Trả lời

8

Bạn nên sử dụng bbox đối với tiện ích root (khi đó phương thức grid được gọi, không phải tiện ích được đặt bên trong lưới).

print(root.bbox()) 

Nhưng không có đối số, nó sẽ cung cấp hộp giới hạn của tiện ích gốc. Bạn cần phải xác định column, row luận (của lbl):

print(root.bbox(0, 0)) 

Nếu widget mà bạn muốn để có được phụ tùng không ở vị trí như 0/0 cột/hàng, bạn cũng cần phải xác định col2, row2 tranh cãi.

grid_bbox(column=None, row=None, col2=None, row2=None) phương pháp tkinter.Tk dụ

Return một tuple của số nguyên tọa độ cho khung giới hạn của widget này được kiểm soát bởi các lưới quản lý hình học.

Nếu COLUMN, ROW được cung cấp hộp giới hạn áp dụng từ ô có hàng và cột 0 cho ô được chỉ định. Nếu COL2 và ROW2 được đưa ra hộp giới hạn bắt đầu tại ô đó.

Số nguyên được trả về chỉ định độ lệch của góc trên bên trái trong tiện ích chính và chiều rộng và chiều cao. (help(root.bbox))


Hoặc bạn có thể sử dụng winfo_widthwinfo_height:

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

"Nếu ai đó có thể giải thích tại sao điều này là" – beauxq

+0

@beauxq, Vào thời điểm trả lời câu hỏi, tôi didn' t biết "tại sao đây là" một phần, vì vậy tôi đăng câu trả lời với "những gì sẽ là bước để đạt được điều này một phần" chỉ. Bây giờ tôi đã cập nhật câu trả lời để bao gồm phần còn thiếu. Bằng cách cố gắng trả lời phần còn thiếu, tôi đã tìm cách thay thế. – falsetru

Các vấn đề liên quan