Kivy所有屏幕的GUI显示布局相同

2 投票
1 回答
1739 浏览
提问于 2025-04-18 03:15

问题是,如果我在Windows上创建了一个东西,然后在Android的三星S3上测试同样的东西,界面上显示的控件位置会不一样。例如:

1. 我创建了一个控件,设置它的大小为800x600
2. 加入一个标签,大小为100x100
3. 把它放在位置700,10,这样它应该在右下角可见。

在Windows的测试环境中,这一切都正常,但当我把代码移到三星S3上使用kivy启动器时,标签却没有显示在同样的位置。

我看了关于矩阵的文档,地址是 http://kivy.org/docs/api-kivy.metrics.html,并在代码中使用了以下内容:

import os
os.environ['KIVY_METRICS_DENSITY'] = '1'
os.environ['KIVY_DPI'] = '96'

这些是在Windows上的值,但在三星S3上似乎不管用。三星S3上的原始值是:
KIVY_METRICS_DENSITY = 2
KIVY_DPI = 320
Window.size = 1028x728(我想是这样)

然后我在位置和大小的值上加了dp,但在Android上还是一样。我知道我漏掉了什么。有人能给点建议吗?

下面是示例代码:

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.widget import Widget
import os
os.environ['KIVY_METRICS_DENSITY'] = '1'
os.environ['KIVY_DPI'] = '96'

class Container(Widget):
    def __init__(self, **kwargs):
        super(Container, self).__init__(**kwargs)
        self.size = '800dp','600dp'
        label = Label(text="Am i A Label ?")
        label.size = '100dp','100dp'
        label.pos = '700dp','10dp'
        self.add_widget(label)

class MyJB(App):
    def build(self):

        parent = Container()
        return parent

if __name__ == '__main__':
    MyJB().run()

1 个回答

3

听起来你的代码正好在按照你说的方式运行;它把标签放在了一个特定的像素位置。在默认的桌面窗口中,这个位置恰好是左下角,但在其他设备上(或者调整窗口大小后),它可能会出现在任何地方,这取决于显示器的分辨率。

你应该使用布局,这样所有东西都是按比例设置的,可以适应不同形状的屏幕。例如,你可以使用AnchorLayout把标签放在右下角。

撰写回答