Получить ширину и высоту окна, внутри init - PullRequest
0 голосов
/ 14 мая 2019

Я использую Python и Tkinter , и у меня есть функция (назовем ее getWinProperties), которая запускается при инициализации кадра, эта функция запускается после настройкиширина и высота (например, self.configure(width=width, height=height)).Мне нужно получить текущую ширину и высоту фреймов, чтобы использовать их внутри функции, эту функцию также нужно использовать вне инициализации фрейма.

Когда я использую self.winfo_width() и self.winfo_height(), дажепосле self.update() мне дают 1 ширину и 1 высоту.

class CustomFrame(Frame):

    def __init__(self, width, height):
        self.configure(width=width, height=height)
        self.getWinProperties()

    def getWinProperties(self):
        self.update()
        width = self.winfo_width()
        height = self.winfo_height()
        print(width, height)

Я ожидал, что при инициализации кадра print(width, height) напечатает ширину из __init__(self, width, height), но вместо этого напечатает 1, 1

1 Ответ

0 голосов
/ 14 мая 2019

Пока окно не будет нарисовано на экране, оно будет иметь ширину и высоту только 1, поскольку существует множество факторов, которые могут повлиять на его фактический размер.

Если вы хотите, чтобы размер был запрашиваемым, вы можете использовать winfo_reqwidth() и winfo_reqheight().

Из канонической документации для команды winfo_width:

Возвращает десятичную строку, указывающую ширину окна в пикселях. Когда окно впервые создано, его ширина будет 1 пикселем; ширина в конечном итоге будет изменена менеджером геометрии для удовлетворения потребностей окна. Если вам нужна истинная ширина сразу после создания виджета, вызовите update, чтобы заставить менеджер геометрии упорядочить его, или используйте winfo reqwidth, чтобы получить запрошенную ширину окна вместо его фактической ширины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...