python - 在init内部获取窗口宽度和高度
问题描述
我正在使用Python和Tkinter,并且我有一个在初始化我的 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
解决方案
在窗口被绘制到屏幕上之前,它的宽度和高度只有 1,因为有很多因素会影响它的实际大小。
如果你想要它要求的尺寸,你可以使用winfo_reqwidth()
和winfo_reqheight()
。
从命令的规范文档中winfo_width
:
返回一个十进制字符串,以像素为单位给出窗口的宽度。首次创建窗口时,其宽度为 1 像素;宽度最终将由几何管理器更改以满足窗口的需求。如果您在创建小部件后立即需要真实宽度,请调用 update 以强制几何管理器对其进行排列,或使用 winfo reqwidth 获取窗口的请求宽度而不是其实际宽度。
推荐阅读
- this - 从此访问上下文
- apache-spark - Spark worker 无法解析 ECS 上的主机,但可以正常使用 IP 地址
- java - 春季迁移后,带有“java.util.logging”的Tomcat日志停止工作
- java - Javers 无法比较某些模拟对象
- rust - 对多个方法参数使用相同的参考
- makefile - Makefile:依赖项的更改无法触发重建
- javascript - Tween.js - 是否可以补间变量?
- javascript - 向 github 添加市场表单
- mysql - 如何在mysql中对具有不同数据集的列进行排序
- sql - 使用 Microsoft Access 程序上传要存储在 SQL Server 数据库中的图像