Scrollview将一侧填充得比另一侧多(Python Kivy)

Scrollview将一侧填充得比另一侧多(Python Kivy),python,kivy,Python,Kivy,在kv语言中,有没有一种方法可以将scrollview小部件的一侧填充得比另一侧多 下面是一个可运行的示例 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 Butto

在kv语言中,有没有一种方法可以将scrollview小部件的一侧填充得比另一侧多

下面是一个可运行的示例

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()
#: 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}
Kv代码:

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()
#: 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}
#:导入FadeTransition kivy.uix.screenmanager.FadeTransition
屏幕管理:
转换:FadeTransition()
主屏幕:
另一屏幕:
:    
字体大小:32
尺码:125,50
颜色:0,1,0,1
:
字体大小:30
尺寸提示:0.25,0.1
颜色:0,1,0,1
:
小导航按钮:
发布时:app.root.current=“main”
正文:“家”
位置:根x,根顶部-自身高度
:
标签:
id:dataentryinstructions
text:root.text
字体大小:20
文本大小:self.width,无
尺寸提示:无
高度:自身纹理大小[1]
年份:10
padding_x:200
:
名称:“主要”
浮动布局:
MedButton:
发布时:app.root.current=“newgarage”
文本:“新建”
pos_提示:{“x”:0.3728,“top”:0.4}
:
名称:“新车库”
可滚动标签:
BackHomeWidget:
浮动布局:
医疗按钮
正文:“1.材料”
pos_提示:{“x”:0,“top”:0.75}
从外观上可以猜到,这个垫子的左右两侧为200,顶部和底部为10。但是如果我想把左边的垫在200,右边的垫在120怎么办

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


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

您可以将整个标签放在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
:
小装置:
大小提示:无
宽度:200
滚动视图:
标签:
id:dataentryinstructions
text:root.text
字体大小:20
文本大小:self.width,无
尺寸提示:无
高度:自身纹理大小[1]
年份:10
小装置:
大小提示:无
宽度: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()
从kivy.app导入应用
#kivy.require(“1.10.0”)
从kivy.lang导入生成器
从kivy.uix.screenmanager导入screenmanager、Screen、FadeTransition
从kivy.uix.button导入按钮
从kivy.uix.label导入标签
从kivy.uix.boxlayout导入boxlayout
从kivy.uix.widget导入widget
从kivy.uix.scrollview导入scrollview
从kivy.properties导入StringProperty、ObjectProperty、NumericProperty
类可滚动标签(BoxLayout):
text=“诸如此类”
另一类屏幕(屏幕):
通过
类BackHomeWidget(小部件):
通过
类主屏幕(屏幕):
通过
类屏幕管理(屏幕管理器):
通过
演示文稿=生成器。加载字符串(“”)
#:导入FadeTransition kivy.uix.screenmanager.FadeTransition
屏幕管理:
转换:FadeTransition()
主屏幕:
另一屏幕:
:    
字体大小:32
尺码:125,50
颜色:0,1,0,1
:
字体大小:30
尺寸提示:0.25,0.1
颜色:0,1,0,1
:
小导航按钮:
发布时:app.root.current=“main”
正文:“家”
位置:根x,根顶部-自身高度
:
小装置:
大小提示:无
宽度:200
滚动视图:
标签:
id:dataentryinstructions
text:root.text
字体大小:20
文本大小:self.width,无
尺寸提示:无
高度:自身纹理大小[1]
年份:10
小装置:
大小提示:无
宽度:120
:
名称:“主要”
浮动布局:
MedButton:
发布时:app.root.current=“newgarage”
文本:“新建”
pos_提示:{“x”:0.3728,“top”:0.4}
:
名称:“新车库”
可滚动标签:
BackHomeWidget:
浮动布局:
医疗按钮
正文:“1.材料”
pos_提示:{“x”:0,“top”:0.75}
""")
类主应用程序(应用程序):
def生成(自):
回执
如果名称=“\uuuuu main\uuuuuuuu”:
MainApp().run()

您可以更好地向我解释,可能是一个指示您得到什么和您想要得到什么的图形,您的代码无法复制,因为存在未定义的小部件。我已经更新了问题,以提供可运行的代码。希望通过本例可以明显看出,在scrollview文本的两侧独立控制填充。