【问题标题】:Kivy Button.center gives wrong value before the page is drawnKivy Button.center 在页面绘制之前给出了错误的值
【发布时间】:2021-04-08 01:38:41
【问题描述】:

我有一个 GridLayout,我在其中添加基于 json 文件的按钮,该文件可以从一次运行更改为下一次运行(因此按钮不存在于 .kv 文件中,而是添加到 python 代码中,按钮的数量也可以改变)。我希望按钮在中心有一个图像,但访问 button.center 会返回垃圾值(在将按钮添加到网格布局之前和之后)。相反,我尝试在绘制相关屏幕后打印 button.center 并返回正确的值。我能想到的唯一解决方案是在启动 kivy 应用程序之前根据我的 json 上的数据使用一些 python 代码动态更改 .kv 文件,但我认为必须有一个更简单的解决方案。

for but in buttons:
  but = Button();
  but.add_widget(Image(source = "source.png", center = but.center))
  # Adds images in the bottom left corner regardless of button position
  print(but.center) # prints [50.0, 50.0] regardless of button position

【问题讨论】:

    标签: python kivy


    【解决方案1】:
    print(but.center) # prints [50.0, 50.0] regardless of button position
    

    不,它会打印[50.0, 50.0],因为那是当前按钮的中心位置。

    在应用布局逻辑之后,您希望在下一帧或之后访问该值。例如,您可以Clock.schedule_once(some_function, 0) 在下一帧运行函数。

    或者,您可以绑定到按钮位置,以便每当它更改您的逻辑时运行。

    【讨论】:

    • 非常感谢您的回答,我认为您建议的第一种方法对我不起作用,因为我绘制的第一个屏幕不是带有按钮的屏幕。另一方面,第二个工作完美!对于对如何绑定到小部件属性感兴趣的人,请阅读此处link,其中显示“bind(**kwargs)”
    猜你喜欢
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多