Kivy通过Python和Kivy语言放置小部件的方式略有不同。我错过什么了吗?

2024-04-19 02:02:14 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
1条回答
网友
1楼 · 发布于 2024-04-19 02:02:14

构建时,小部件的初始大小为(100100)。如果您从此更改大小:

<Bird>:
    size: 70, 80

对此:

<Bird>:
    size: 100, 80

矩形将正确对齐。在kv文件中创建的初始矩形位于父窗口的中心,在Python代码中创建的其他矩形向左偏移。你知道吗

如果将Python代码中的Bird构造函数改为:

def __init__(self, **kwargs):
    super(Bird, self).__init__(**kwargs)
    self.pick_color()

为此(有效地将默认小部件大小从(100100)覆盖为(50,50)):

def __init__(self, **kwargs):
    self.size = (50, 50)
    super(Bird, self).__init__(**kwargs)
    self.pick_color()

您将注意到在Python代码中创建的矩形将向右移动。将文件更改为:

<Bird>:
    size: 70, 80

收件人:

<Bird>:
    size: 50, 80

它匹配(新的)初始窗口小部件的宽度大小(50,50),所有矩形将再次对齐。你知道吗

您的问题的解决方案是保持一切原样,只是将Python中的newbirds的size设置为与kv文件中的相同:

def __init__(self, **kwargs):
    self.size = (70, 80)
    super(Bird, self).__init__(**kwargs)
    self.pick_color()

一切都会如愿。你知道吗

这意味着kv文件的size属性不会应用于Python端创建的Birds,而只应用于由kv声明创建的Birds。是这个Kivy bug还是Python代码中又少了一个步骤,让Builder从kv文件应用size到Python创建的Birds,我现在不知道。你知道吗

根据我的经验,在Kivy开发的这一点上,混合太多的kv和Python代码将导致您在这里遇到的这些奇怪的问题。最好要么用kv处理所有与视图相关的内容,要么完全抛弃kv,用Python构建所有内容。你知道吗

有些东西在kv中根本不起作用,即设置cols属性GridLayout(v1.9.1)。你知道吗

就我个人而言,目前我坚持使用组织良好的Python代码来构建UI,几乎不使用kv文件。你知道吗

希望这有点帮助。。。你知道吗

相关问题 更多 >