Python 一个屏幕中的多个类会阻止FloatLayout正常工作

Python 一个屏幕中的多个类会阻止FloatLayout正常工作,python,kivy,kivy-language,Python,Kivy,Kivy Language,我正在尝试将广告整合到我制作的一个Kivy应用程序中,为此,我希望在一个浮动布局中有一个类(带有广告)位于屏幕顶部,应用程序的其余部分位于下方,在一个单独的类中 我试图用一些测试代码(简单的.py和.kv文件,它有多个屏幕和类,并相应地组织起来)来实现这一点。代码应该有两个浮动布局:一个有文本,另一个有一个按钮,你按下它,它会带你进入下一个屏幕。然而,我遇到的问题是,我无法正确定位按钮,因为小部件似乎在左下角缩小了。它应该在文本框旁边 这是我的.kv文件: WindowManager:

我正在尝试将广告整合到我制作的一个Kivy应用程序中,为此,我希望在一个浮动布局中有一个类(带有广告)位于屏幕顶部,应用程序的其余部分位于下方,在一个单独的类中

我试图用一些测试代码(简单的.py和.kv文件,它有多个屏幕和类,并相应地组织起来)来实现这一点。代码应该有两个浮动布局:一个有文本,另一个有一个按钮,你按下它,它会带你进入下一个屏幕。然而,我遇到的问题是,我无法正确定位按钮,因为小部件似乎在左下角缩小了。它应该在文本框旁边

这是我的.kv文件:

WindowManager:
    Screen1:
    Screen2:

<Screen1>:
    name: "screen1"
    FloatLayout:
        Label:
            pos_hint: {'top': 1, "center_x": 0.5}
            size_hint: (0.2, 0.5)
            font_size: 40
            text: "TEXT AT TOP OF SCREEN"
    FloatLayout:
        TextInput:
            pos_hint: {"x": 0.1, "y": 0.05}
            size_hint: (0.3, 0.05)
            multline:False
    GoS:
        FloatLayout:
            Button:
                text: "PRESS TO GO TO SCREEN 2"
                pos_hint: {"right": 0.5, "center_y": 0.7}
                on_press: widget.goscreen()

<Screen2>:
    name: "screen2"
    Label:
        text: "YOU ARE ON SCREEN TWO"
为什么会这样


另一个小问题是,我的按钮不起作用,因为我似乎无法调用正确的类。如果我使用“root.goscreen()”,它将无法工作,因为我的根小部件没有此功能。这里的正确语法应该是什么?

我建议您使用
BoxLayout
划分GUI

您的按钮不工作,因为您没有将其链接到有效的小部件

GoS
小部件必须以KV定义或导入

以下是您的rec_view.kv文件的建议:

WindowManager:
    Screen1:
    Screen2:

<GoS>:
    Button:
        text: "PRESS TO GO TO SCREEN 2"
        on_press: root.goscreen()

<Screen1>:
    name: "screen1"
    BoxLayout:
        orientation: "vertical"
        BoxLayout:
            orientation: "horizontal"
            size_hint_y: 0.5   # Proportion of screen height that the widget occupe
            Label:
                font_size: 40
                text: "TEXT AT TOP OF SCREEN"
        BoxLayout:
            orientation: "horizontal"
            size_hint_y: 0.3
            TextInput:
                multline:False
        BoxLayout:
            orientation: "horizontal"
            size_hint_y: 0.2
            GoS:

<Screen2>:
    name: "screen2"
    Label:
        text: "YOU ARE ON SCREEN TWO"

您的
Screen1
类包含3个子类(2个
FloatLayouts
和一个
GoS
)。每一个都是
Screen1
的完整大小,因为默认的
size\u提示是
(1,1)
GoS
内部的
FloatLayout
将是大小
(100100)
,因为
GoS
不是
布局
,不尊重
大小提示
。现在还不清楚您希望最终的gui是什么样子,但要获得具有顶部、中部和底部的gui,更好的方法可能是使用
BoxLayout
。还要注意的是,
FloatLayout
是限制性最小的
Layout
,因此在
FloatLayout
中放置
标签并不意味着它将在内部绘制。太棒了,谢谢!请随意添加此作为答案,我可以接受:)我将类GoS从小部件更改为FloatLayout并将其修复。BoxLayouts仍然让我有点困惑,但我知道容器通常比浮动更好。还有一个问题,你是否知道我应该调用什么才能调用我的GoS类(最后一点)?如果你在你的
GoS中添加
id
kv
中的规则(比如:
id:GoS
),那么你按下
按钮的
可以是按下
按钮的
。您可以在
goscreen()
方法中将
self.parent.current=“screen2”
替换为
kv.current=“screen2”
。嘿,非常感谢您的回答。我尝试这样做的真正原因是,我试图使用KivyMob将广告集成到我的应用程序中,文档向我展示了一个单独的类和一个单独的run命令,因此我试图找到一种将其组合到主代码中的方法。我希望通过一个测试代码(就像我做的那样)可以帮助我了解如何将两位代码合并在一起
WindowManager:
    Screen1:
    Screen2:

<GoS>:
    Button:
        text: "PRESS TO GO TO SCREEN 2"
        on_press: root.goscreen()

<Screen1>:
    name: "screen1"
    BoxLayout:
        orientation: "vertical"
        BoxLayout:
            orientation: "horizontal"
            size_hint_y: 0.5   # Proportion of screen height that the widget occupe
            Label:
                font_size: 40
                text: "TEXT AT TOP OF SCREEN"
        BoxLayout:
            orientation: "horizontal"
            size_hint_y: 0.3
            TextInput:
                multline:False
        BoxLayout:
            orientation: "horizontal"
            size_hint_y: 0.2
            GoS:

<Screen2>:
    name: "screen2"
    Label:
        text: "YOU ARE ON SCREEN TWO"
    BoxLayout:
        orientation: "horizontal"
        size_hint_y: 0.2
        Button:
            text: "PRESS TO GO TO SCREEN 2"
            on_press: root.goscreen()