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用例中。
答案 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()