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