如何在控制台打印Kivy中按钮的动态尺寸?
如何在Kivy中获取按钮尺寸(含遍历ids的实现方式)
当然可以通过遍历widget ids的方式获取按钮尺寸,这也是批量获取多个组件尺寸的高效方法。下面是针对你代码的修改方案,能正确打印按钮的实际尺寸:
关键说明
Kivy组件的尺寸是在布局完成后才会被正确计算的,所以要避免在初始化阶段直接获取,否则可能拿到默认的初始尺寸(比如(100, 100))。我们可以通过延迟调用或布局尺寸变化回调来确保获取到正确的数值。
修改后的Python代码
from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.clock import Clock class TestOut(BoxLayout): def __init__(self, **kwargs): super().__init__(**kwargs) # 延迟一帧调用,确保组件布局完成后再获取尺寸 Clock.schedule_once(lambda dt: self.get_size(), 0) def on_size(self, *args): # 根布局尺寸变化时,重新获取按钮尺寸 self.get_size() def get_size(self): # 遍历所有带id的组件,打印按钮尺寸 for widget_id, widget in self.ids.items(): print(f"组件[{widget_id}]的尺寸: {widget.size}") # 也可以单独获取指定按钮的尺寸 # print(f"button1的尺寸: {self.ids.button1.size}") class PlaygroundApp(App): title = "test" def build(self): return TestOut() if __name__ == "__main__": PlaygroundApp().run()
修改后的KV代码(可选,添加点击触发测试)
<TestOut>: Button: id: button1 text: 'A' width: dp(100) size_hint: None, 1 on_press: root.get_size() # 点击按钮时触发尺寸打印 Button: id: button2 text: 'B' on_press: root.get_size()
运行效果
- 程序启动后会自动打印一次所有按钮的正确尺寸
- 调整窗口大小时,会实时打印更新后的按钮尺寸
- 点击任意按钮也会触发尺寸打印
内容的提问来源于stack exchange,提问作者beta green
相关产品推荐
相关产品推荐

