Scrollview Padding One Side比对面更多(Python Kivy)

时间:2018-03-09 00:33:19

标签: python kivy

kv语言中是否有一种方法可以将滚动视图小部件的一侧填充到相反的位置?

这是一个可运行的例子......

Python代码:

from kivy.app import App
# kivy.require("1.10.0")
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.uix.scrollview import ScrollView
from kivy.properties import StringProperty, ObjectProperty, NumericProperty

class ScrollableLabel(ScrollView):
    text = "blah blah blah"

class AnotherScreen(Screen):
    pass

class BackHomeWidget(Widget):
    pass

class MainScreen(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_file("Test_Running_Console.kv")

class MainApp(App):

    def build(self):
        return presentation

if __name__ == "__main__":
    MainApp().run()

Kv代码:

#: import FadeTransition kivy.uix.screenmanager.FadeTransition

ScreenManagement:
    transition: FadeTransition()
    MainScreen:
    AnotherScreen:

<SmallNavButton@Button>:    
    font_size: 32
    size: 125, 50    
    color: 0,1,0,1

<MedButton@Button>:
    font_size: 30
    size_hint: 0.25, 0.1
    color: 0,1,0,1

<BackHomeWidget>:
    SmallNavButton:
        on_release: app.root.current = "main"
        text: "Home"
        pos: root.x, root.top - self.height

<ScrollableLabel>:
    Label:
        id: dataentryinstructions
        text: root.text
        font_size: 20
        text_size: self.width, None
        size_hint_y: None
        height: self.texture_size[1]
        padding_y: 10
        padding_x: 200

<MainScreen>:
    name: "main"
    FloatLayout: 
        MedButton:
            on_release: app.root.current = "newgarage"
            text: "Create New"
            pos_hint: {"x":0.3728, "top": 0.4}

<AnotherScreen>:
    name: "newgarage"
    ScrollableLabel:
    BackHomeWidget:
    FloatLayout:
        MedButton
            text: "1. Stuff"
            pos_hint: {"x":0, "top": 0.75}

正如人们可能从它的外观猜测的那样,它将左侧和右侧填充为200,顶部和底部填充为10.但是如果我想将左侧填充为200而右侧填充为120?< / p>

在这种特殊情况下,我只想让scrollview占据屏幕的右半部分。 (以避免与按钮重叠)

如果我在Kivy文档中忽略了这一点,请原谅我。从文档中,它看起来像Gridlayout&amp; BoxLayout可以接受四个填充参数(每个方向一个),但不确定如何将其合并到scrollview用例中。

1 个答案:

答案 0 :(得分:1)

您可以将整个标签放在BoxLayout中,并添加所需宽度的空小部件。

 <ScrollableLabel>:
    Widget:
        size_hint_x: None
        width: 200
    ScrollView:
        Label:
            id: dataentryinstructions
            text: root.text
            font_size: 20
            text_size: self.width, None
            size_hint_y: None
            height: self.texture_size[1]
            padding_y: 10
    Widget:
        size_hint_x: None
        width: 120

这是整个代码:

from kivy.app import App
# kivy.require("1.10.0")
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
from kivy.uix.scrollview import ScrollView
from kivy.properties import StringProperty, ObjectProperty, NumericProperty

class ScrollableLabel(BoxLayout):
    text = "blah blah blah"

class AnotherScreen(Screen):
    pass

class BackHomeWidget(Widget):
    pass

class MainScreen(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_string("""
#: import FadeTransition kivy.uix.screenmanager.FadeTransition

ScreenManagement:
    transition: FadeTransition()
    MainScreen:
    AnotherScreen:

<SmallNavButton@Button>:    
    font_size: 32
    size: 125, 50    
    color: 0,1,0,1

<MedButton@Button>:
    font_size: 30
    size_hint: 0.25, 0.1
    color: 0,1,0,1

<BackHomeWidget>:
    SmallNavButton:
        on_release: app.root.current = "main"
        text: "Home"
        pos: root.x, root.top - self.height

<ScrollableLabel>:
    Widget:
        size_hint_x: None
        width: 200
    ScrollView:
        Label:
            id: dataentryinstructions
            text: root.text
            font_size: 20
            text_size: self.width, None
            size_hint_y: None
            height: self.texture_size[1]
            padding_y: 10
    Widget:
        size_hint_x: None
        width: 120


<MainScreen>:
    name: "main"
    FloatLayout: 
        MedButton:
            on_release: app.root.current = "newgarage"
            text: "Create New"
            pos_hint: {"x":0.3728, "top": 0.4}

<AnotherScreen>:
    name: "newgarage"
    ScrollableLabel:
    BackHomeWidget:
    FloatLayout:
        MedButton
            text: "1. Stuff"
            pos_hint: {"x":0, "top": 0.75}
""")

class MainApp(App):

    def build(self):
        return presentation

if __name__ == "__main__":
    MainApp().run()