【问题标题】:How to make widgets appear from the bottom in scrollview in Python Kivy?如何让小部件从底部出现在 Python Kivy 的滚动视图中?
【发布时间】:2023-02-25 23:18:19
【问题描述】:

我如何让这些动态添加的小部件出现在滚动视图的底部而不是顶部。有点像 WhatssApp、Telegram 或 Messenger。我有点卡在这个上。我尝试使用 PushMatrix 和 PopMatrix,但随后文本出现颠倒。

文件:

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.core.window import Window


Builder.load_file('scrollview_modification.kv')

class MyLayout(Widget):

    def add_widgets(self):
        settings_label = SettingsLabel(text="Widget added")
        self.ids.widgets.add_widget(settings_label)

class SettingsLabel(Label):
    pass

class AwesomeApp(App):
    def build(self):
        Window.clearcolor = (0,1,1,1)
        return MyLayout()

if __name__ == '__main__':
    AwesomeApp().run()

kv文件:

<MyLayout>
BoxLayout:
    orientation:'vertical'
    size: root.width, root.height
    size_hint: 1, 0.6
    Button:
        text: "add_widgets"
        on_press: root.add_widgets()
        size_hint: 1, 0.25
    ScrollView:
        do_scroll_x: False
        do_scroll_y: True
        BoxLayout:
            size_hint_y: None
            height: self.minimum_height
            orientation: 'vertical'
            id: widgets
            spacing: 3
            padding: 3

<SettingsLabel>
    markup: True
    bold: True
    size_hint: 1, None
    height: 50
    font_size: 16
    col: (179/255, 89/255, 0 , 1)
    canvas.before:
        Color:
            rgba: self.col
        RoundedRectangle:
            size: self.size
            pos: self.pos
            radius: [10]

【问题讨论】:

    标签: python kivy kivy-language kivymd


    【解决方案1】:

    要使动态添加的小部件显示在 ScrollView 的底部,您可以将小部件 BoxLayout 的高度设置为其包含的所有小部件的高度之和。这样,当添加一个新的小部件时,它将被放置在 ScrollView 的底部。

    您可以像这样修改您的 kv 文件:

    <MyLayout>
    BoxLayout:
        orientation:'vertical'
        size: root.width, root.height
        size_hint: 1, 0.6
        Button:
            text: "add_widgets"
            on_press: root.add_widgets()
            size_hint: 1, 0.25
        ScrollView:
            do_scroll_x: False
            do_scroll_y: True
            BoxLayout:
                size_hint_y: None
                height: self.minimum_height
                orientation: 'vertical'
                id: widgets
                spacing: 3
                padding: 3
    

    和 python 脚本作为

    class MyLayout(Widget):
    
    def add_widgets(self):
        settings_label = SettingsLabel(text="Widget added")
        self.ids.widgets.add_widget(settings_label)
        self.ids.scroll_to(settings_label)
        self.ids.widgets.height = sum(child.height for child in self.ids.widgets.children)
    

    这将使新的小部件出现在滚动视图的底部。请注意,如果 ScrollView 未满,新的小部件可能会出现在顶部附近,但随着添加更多小部件,它们将出现在底部。

    【讨论】:

    • 抱歉,它根本不起作用。您实际测试过修改后的代码吗?
    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多