页面布局 - 在 Kivy 中重置页面 / Python
Page layout - resetting the page in Kivy / Python
我刚刚开始使用 Python 的 Kivy 编程。我在使用 PageLayout 时遇到问题。这是我目前的 Python 代码 (Python 3.6.2):
import kivy
from kivy.app import App
from kivy.uix.pagelayout import PageLayout
class PageApp(App):
def build(self):
return PageLayout()
paApp = PageApp()
paApp.run()
Kivy 文件 (PageApp.kv) 包含以下内容:
<PageLayout>:
canvas:
Color:
rgb: 0, .5, .95
Rectangle:
pos: self.pos
size: self.size
BoxLayout:
orientation: "vertical"
Button:
text: "This is a test button"
size_hint_y: .4
Label:
markup: True
text: "This is a [b]looooong[/b] text... "*100
color: 0, 0, 0, 1
outline_color: 0, 0.5, 0.5, 1
font_size: 30
BoxLayout:
orientation: "vertical"
Label:
markup: True
text: "This is an even [b]looooonger[/b] text... "*100
color: 0, 0, 0, 1
outline_color: 0, 0.5, 0.5, 1
font_size: 30
Button:
text: "This is a second test button"
size_hint_y: .2
Button:
text: "Page 3"
Button:
text: "Page 4"
结果如下所示:Page 1, Page 2 (after swiping)
从截图中可以看出,出现了以下问题:
- 标签不显示。
- 背景只有一部分是我在 canvas 设置中指定的颜色。
- 最重要的是:页面在滑动后似乎没有重置,导致滑动到第 2 页时第一页的元素仍然留在页面上的问题。页面3 和 4 似乎工作正常,因为按钮占据了整个 space...
有谁知道如何解决这些问题?
好的
你没有设置label的text_size 属性你要显示的文字很长
抱歉,背景颜色正是您在 canvas 中指定的颜色,请参见下图
如果想缩小next/previews页面的大小,可以设置PageLayout的border属性当前
如果你只是想要一个小部件来围绕子小部件滑动,我建议你使用 Caroussel 小部件
试试下面的代码:
-main.py
import kivy
from kivy.app import App
from kivy.uix.pagelayout import PageLayout
class PageApp(App):
def build(self):
return PageLayout()
paApp = PageApp()
paApp.run()
-page.kv
<PageLayout>:
border: 5
BoxLayout:
canvas:
Color:
rgb: 0, .5, .95
Rectangle:
pos: self.pos
size: self.size
orientation: "vertical"
Button:
text: "This is a test button"
size_hint_y: .4
Label:
markup: True
text: "This is a [b]looooong[/b] text... " * 100
text_size: self.size
color: 0, 0, 0, 1
outline_color: 0, 0.5, 0.5, 1
font_size: 30
BoxLayout:
canvas:
Color:
rgb: 0, .5, .95
Rectangle:
pos: self.pos
size: self.size
orientation: "vertical"
Label:
markup: True
text: "This is an even [b]looooonger[/b] text... " * 100
color: 0, 0, 0, 1
outline_color: 0, 0.5, 0.5, 1
font_size: 30
text_size: self.size
Button:
text: "This is a second test button"
size_hint_y: .2
Button:
canvas.before:
Color:
rgb: 0, .5, .95
Rectangle:
pos: self.pos
size: self.size
text: "Page 3"
Button:
canvas.before:
Color:
rgb: 0, .5, .95
Rectangle:
pos: self.pos
size: self.size
text: "Page 4"
-一些输出:
背景颜色证明:
希望对您有所帮助!
详情请参考下例
问题标签不显示。
回答 这两个标签确实出现了,但是因为你超出了文本大小,所以显示为黑色标签。
在第 1 页中,我将乘法值从 100 更改为 49。任何 50 及以上的值,您都会看到一个黑色标签。
在第 2 页,我删除了 100。任何介于 2 和 36 之间的文本都会溢出到第 1 页。任何 37 及以上的内容,您都会看到一个黑色标签。
问题 背景只有一部分是我在 canvas 设置中指定的颜色。
回答 canvas 的颜色没有为第 2 页设置。因此,它使用第 1 页的颜色。
问题 最重要的是:滑动后页面似乎没有重置,导致滑动到第二页时第一页的元素仍然在页面上的问题。第 3 页和第 4 页似乎工作正常,因为按钮占据了整个 space...
回答您将在右侧或左侧看到边框区域,用于从一页滑动到下一页。
例子
main.py
from kivy.app import App
from kivy.uix.pagelayout import PageLayout
class PageLayoutDemo(PageLayout):
pass
class TestApp(App):
title = "Kivy PageLayout Demo"
def build(self):
return PageLayoutDemo()
if __name__ == "__main__":
TestApp().run()
test.kv
#:kivy 1.10.0
<PageLayoutDemo>:
BoxLayout:
canvas:
Color:
rgb: 0, .5, .95, 1
Rectangle:
pos: self.pos
size: self.size
orientation: "vertical"
Button:
text: "This is a test button"
size_hint_y: .4
Label:
markup: True
text: "This is a [b]looooong[/b] text... " * 49
color: 0, 0, 0, 1
outline_color: 0, 0.5, 0.5, 1
font_size: 30
BoxLayout:
orientation: "vertical"
canvas:
Color:
rgba: 109/255., 8/255., 57/255., 1
Rectangle:
pos: self.pos
size: self.size
Label:
markup: True
text: "This is an even [b]looooonger[/b] text... "
color: 0, 0, 0, 1
outline_color: 0, 0.5, 0.5, 1
font_size: 30
Button:
text: "This is a second test button"
size_hint_y: .2
Button:
text: "Page 3"
Button:
text: "Page 4"
输出
我刚刚开始使用 Python 的 Kivy 编程。我在使用 PageLayout 时遇到问题。这是我目前的 Python 代码 (Python 3.6.2):
import kivy
from kivy.app import App
from kivy.uix.pagelayout import PageLayout
class PageApp(App):
def build(self):
return PageLayout()
paApp = PageApp()
paApp.run()
Kivy 文件 (PageApp.kv) 包含以下内容:
<PageLayout>:
canvas:
Color:
rgb: 0, .5, .95
Rectangle:
pos: self.pos
size: self.size
BoxLayout:
orientation: "vertical"
Button:
text: "This is a test button"
size_hint_y: .4
Label:
markup: True
text: "This is a [b]looooong[/b] text... "*100
color: 0, 0, 0, 1
outline_color: 0, 0.5, 0.5, 1
font_size: 30
BoxLayout:
orientation: "vertical"
Label:
markup: True
text: "This is an even [b]looooonger[/b] text... "*100
color: 0, 0, 0, 1
outline_color: 0, 0.5, 0.5, 1
font_size: 30
Button:
text: "This is a second test button"
size_hint_y: .2
Button:
text: "Page 3"
Button:
text: "Page 4"
结果如下所示:Page 1, Page 2 (after swiping)
从截图中可以看出,出现了以下问题:
- 标签不显示。
- 背景只有一部分是我在 canvas 设置中指定的颜色。
- 最重要的是:页面在滑动后似乎没有重置,导致滑动到第 2 页时第一页的元素仍然留在页面上的问题。页面3 和 4 似乎工作正常,因为按钮占据了整个 space...
有谁知道如何解决这些问题?
好的
你没有设置label的text_size 属性你要显示的文字很长
抱歉,背景颜色正是您在 canvas 中指定的颜色,请参见下图
如果想缩小next/previews页面的大小,可以设置PageLayout的border属性当前
如果你只是想要一个小部件来围绕子小部件滑动,我建议你使用 Caroussel 小部件
试试下面的代码:
-main.py
import kivy
from kivy.app import App
from kivy.uix.pagelayout import PageLayout
class PageApp(App):
def build(self):
return PageLayout()
paApp = PageApp()
paApp.run()
-page.kv
<PageLayout>:
border: 5
BoxLayout:
canvas:
Color:
rgb: 0, .5, .95
Rectangle:
pos: self.pos
size: self.size
orientation: "vertical"
Button:
text: "This is a test button"
size_hint_y: .4
Label:
markup: True
text: "This is a [b]looooong[/b] text... " * 100
text_size: self.size
color: 0, 0, 0, 1
outline_color: 0, 0.5, 0.5, 1
font_size: 30
BoxLayout:
canvas:
Color:
rgb: 0, .5, .95
Rectangle:
pos: self.pos
size: self.size
orientation: "vertical"
Label:
markup: True
text: "This is an even [b]looooonger[/b] text... " * 100
color: 0, 0, 0, 1
outline_color: 0, 0.5, 0.5, 1
font_size: 30
text_size: self.size
Button:
text: "This is a second test button"
size_hint_y: .2
Button:
canvas.before:
Color:
rgb: 0, .5, .95
Rectangle:
pos: self.pos
size: self.size
text: "Page 3"
Button:
canvas.before:
Color:
rgb: 0, .5, .95
Rectangle:
pos: self.pos
size: self.size
text: "Page 4"
-一些输出:
背景颜色证明:
希望对您有所帮助!
详情请参考下例
问题标签不显示。
回答 这两个标签确实出现了,但是因为你超出了文本大小,所以显示为黑色标签。
在第 1 页中,我将乘法值从 100 更改为 49。任何 50 及以上的值,您都会看到一个黑色标签。
在第 2 页,我删除了 100。任何介于 2 和 36 之间的文本都会溢出到第 1 页。任何 37 及以上的内容,您都会看到一个黑色标签。
问题 背景只有一部分是我在 canvas 设置中指定的颜色。 回答 canvas 的颜色没有为第 2 页设置。因此,它使用第 1 页的颜色。
问题 最重要的是:滑动后页面似乎没有重置,导致滑动到第二页时第一页的元素仍然在页面上的问题。第 3 页和第 4 页似乎工作正常,因为按钮占据了整个 space...
回答您将在右侧或左侧看到边框区域,用于从一页滑动到下一页。
例子
main.py
from kivy.app import App
from kivy.uix.pagelayout import PageLayout
class PageLayoutDemo(PageLayout):
pass
class TestApp(App):
title = "Kivy PageLayout Demo"
def build(self):
return PageLayoutDemo()
if __name__ == "__main__":
TestApp().run()
test.kv
#:kivy 1.10.0
<PageLayoutDemo>:
BoxLayout:
canvas:
Color:
rgb: 0, .5, .95, 1
Rectangle:
pos: self.pos
size: self.size
orientation: "vertical"
Button:
text: "This is a test button"
size_hint_y: .4
Label:
markup: True
text: "This is a [b]looooong[/b] text... " * 49
color: 0, 0, 0, 1
outline_color: 0, 0.5, 0.5, 1
font_size: 30
BoxLayout:
orientation: "vertical"
canvas:
Color:
rgba: 109/255., 8/255., 57/255., 1
Rectangle:
pos: self.pos
size: self.size
Label:
markup: True
text: "This is an even [b]looooonger[/b] text... "
color: 0, 0, 0, 1
outline_color: 0, 0.5, 0.5, 1
font_size: 30
Button:
text: "This is a second test button"
size_hint_y: .2
Button:
text: "Page 3"
Button:
text: "Page 4"