页面布局 - 在Kivy / Python中重置页面

时间:2017-10-25 11:19:26

标签: python-3.x kivy kivy-language page-layout

我刚刚开始使用Kivy编程Python。我在使用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 1Page 2 (after swiping)

从屏幕截图中可以看到,出现以下问题:

  1. 标签不显示
  2. 背景仅部分采用我在canvas-settings中指定的颜色。
  3. 最重要的是:页面在刷卡后似乎无法重置,导致第一页上的元素在刷到第2页时仍保留在页面上的问题.Page 3和4似乎工作正常,因为按钮占据了整个空间......
  4. 有谁知道如何解决这些问题?

2 个答案:

答案 0 :(得分:0)

  1. 您没有设置标签的 text_size 属性,而您要展示的文字很长

  2. 抱歉,背景颜色正是您在画布中指定的颜色,请参阅下面的图片

  3. 如果您想减少当前

  4. 中下一个/预览页面的大小,可以设置PageLayout的边框属性
  5. 如果你只是想让一个小工具滑动arround子小部件,我建议你使用 Caroussel 小部件

  6. 尝试以下代码:

    - 的 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"
    

    - 某些输出

    page 1

    page 2

    page 3

    page 4

    背景颜色证明:

    proof

    我希望这有帮助!

答案 1 :(得分:0)

详情请参阅以下示例。

问题标签不显示 答案两个标签确实显示为黑色标签,因为您已超出文字大小。 在第1页中,我将乘法值从100更改为49.任何50及以上,您将看到黑色标签。
在第2页,我删除了100.在2到36之间的任何内容,文本溢出到第1页。任何37及以上,你会看到一个黑色标签。

问题背景仅部分使用我在画布设置中指定的颜色。 答案第2页未设置画布的颜色。因此,它使用的是第1页的颜色。

问题最重要的是:在刷卡后页面似乎没有重置,导致第一页的元素在刷到第2页时仍保留在页面上的问题。 4似乎工作正常,因为按钮占据整个空间...
回答您会看到右侧或左侧的边框区域,用于从一个页面滑动到下一个页面。

实施例

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"

输出

enter image description here enter image description here