页面布局 - 在 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)

从截图中可以看出,出现了以下问题:

  1. 标签不显示
  2. 背景只有一部分是我在 canvas 设置中指定的颜色。
  3. 最重要的是:页面在滑动后似乎没有重置,导致滑动到第 2 页时第一页的元素仍然留在页面上的问题。页面3 和 4 似乎工作正常,因为按钮占据了整个 space...

有谁知道如何解决这些问题?

好的

  1. 你没有设置label的text_size 属性你要显示的文字很长

  2. 抱歉,背景颜色正是您在 canvas 中指定的颜色,请参见下图

  3. 如果想缩小next/previews页面的大小,可以设置PageLayout的border属性当前

  4. 如果你只是想要一个小部件来围绕子小部件滑动,我建议你使用 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"

输出