У меня есть метка в тексте, и я хочу получить текущую ширину метки

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()

label = tk.Label(root, text="hello world!")
label.pack()

print("label width: ", label.winfo_width())

root.mainloop()

Вот исполняемый пример моей проблемы, метод .winfo_width() всегда возвращает 1. Имеет ли tkinter метод для получения реальной ширины метки или мне нужно его построить?

0
Mat.C 13 Апр 2019 в 19:56

2 ответа

Лучший ответ

Правильный способ получения ширины одного виджета - метод winfo_width. Он вернет ширину любого виджета.

Однако важно знать о winfo_width: он возвращает фактическую ширину отображаемого виджета. Если он не был визуализирован - либо вы не поместили его в окно, либо окно не имело возможности его нарисовать - оно вернет ширину в 1 пиксель.

В вашем случае вы можете позвонить update до получения ширины. Это приведет к отображению окна на дисплее, в результате чего будет получено правильное значение winfo_width.

root.update()
print("label width: ", label.winfo_width())
1
Bryan Oakley 13 Апр 2019 в 18:18
    root.geometry("800x600")

http://effbot.org/tkinterbook/widget.htm#Tkinter. Widget.winfo_width - метод Цитируя ссылку, в которой говорится: winfo_width () [#]

Получите ширину этого виджета в пикселях. Обратите внимание, что если окно не управляется диспетчером геометрии, этот метод возвращает 1. Чтобы получить реальное значение, вам, возможно, придется сначала вызвать update_idletasks. Вы также можете использовать winfo_reqwidth, чтобы получить запрошенную ширину виджета (то есть «естественный» размер, определяемый самим виджетом на основе его содержимого).

Возвращает: текущая ширина виджета в пикселях.

0
Rahul 13 Апр 2019 в 17:23