首页 > 解决方案 > 在init内部获取窗口宽度和高度

问题描述

我正在使用PythonTkinter,并且我有一个在初始化我的 Frame 时运行的函数(我们称之为 getWinProperties),该函数在我配置宽度和高度(例如self.configure(width=width, height=height))后运行。我需要获取Frames当前的宽度和高度,在函数内部使用,这个函数也需要在frame的初始化之外使用。

当我使用self.winfo_width()andself.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

标签: pythontkinter

解决方案


在窗口被绘制到屏幕上之前,它的宽度和高度只有 1,因为有很多因素会影响它的实际大小。

如果你想要它要求的尺寸,你可以使用winfo_reqwidth()winfo_reqheight()

从命令的规范文档中winfo_width

返回一个十进制字符串,以像素为单位给出窗口的宽度。首次创建窗口时,其宽度为 1 像素;宽度最终将由几何管理器更改以满足窗口的需求。如果您在创建小部件后立即需要真实宽度,请调用 update 以强制几何管理器对其进行排列,或使用 winfo reqwidth 获取窗口的请求宽度而不是其实际宽度。


推荐阅读