如何在 python kivy 中创建可滚动的 FloatLayout

Posted

技术标签:

【中文标题】如何在 python kivy 中创建可滚动的 FloatLayout【英文标题】:How to create scrollable FloatLayout in python kivy 【发布时间】:2020-01-22 02:05:54 【问题描述】:

我正在为玩家帐户列表创建一个搜索菜单。 数据库中的球员姓名应显示在ScrollView 中。

我尝试使用GridLayoutScrollView 来做到这一点,但我想将玩家的昵称放在他的照片旁边,所以我认为使用FLoatLayout 是实现这一目标的更好方法。

不过,我不能让FLoatLayout 可滚动。

此代码正在运行:

class TestApp(App):
    def build(self):
        root = BoxLayout(orientation='horizontal', pos=(200, 100))
        left=ScrollView(size_hint=[None, None], size=(194, 334))
        leftGrid = GridLayout(cols=1, size_hint_y=None,padding=20)
        leftGrid.bind(minimum_height=leftGrid.setter('height'))
        for x in range (34):
            self.image = Image(
                source='other_nick.gif', pos=(0, 0),height=30,size_hint_y=None,)
            label = Label(
                text='hello world', pos=(-15, 20), height=30,size_hint_y=None,)
            leftGrid.add_widget(self.image)
            leftGrid.add_widget(label)

        left.add_widget(leftGrid)
        root.add_widget(left)

        return root
if __name__ == "__main__":
    TestApp().run()

但不是我想要的,因为它将文本放在图像旁边,但 FloatLayout 不可滚动:

class TestApp(App):
    def build(self):
        root = BoxLayout(orientation='horizontal', pos=(200, 100))
        left=ScrollView(size_hint=[None, None], size=(194, 334))
        fl = FloatLayout(size_hint_y=None)
        y = 50
        for x in range (34):
            self.image = Image(
                source='other_nick.gif', pos(0,y),height=30,size_hint_y=None,)
            label = Label(
                text='hello world', pos=(-15, y), height=30,size_hint_y=None,)
            fl.add_widget(self.image)
            fl.add_widget(label)
            y -= 30

        left.add_widget(fl)
        root.add_widget(left)

        return root
if __name__ == "__main__":
    TestApp().run()

【问题讨论】:

当您将代码作为打印屏幕提供时,我们无法帮助并尝试您的代码。而是在你的问题中过去。为此,您可以edit您自己的问题 我做到了。我希望你能帮助我 【参考方案1】:

我认为您的第一次尝试比第二次更接近。我已将标签和图像封装在 boxlayout 中。其余不变。

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.scrollview import ScrollView
from kivy.uix.image import Image
from kivy.uix.label import Label

class TestApp(App):
    def build(self):
        root = BoxLayout(orientation='horizontal', pos=(200, 100))
        left=ScrollView(size_hint=[None, None], size=(194, 334))
        leftGrid = GridLayout(cols=1, size_hint_y=None,padding=20)
        leftGrid.bind(minimum_height=leftGrid.setter('height'))
        for x in range (34):
            image = Image(
                source='other_nick.gif', pos=(0, 0),height=30,size_hint_y=None,)
            label = Label(
                text='hello w. ' + str(x), pos=(-15, 20), height=30,size_hint_y=None,)
            box = BoxLayout(orientation="horizontal", height=40, size_hint_y=None)
            box.add_widget(label)
            box.add_widget(image)

            leftGrid.add_widget(box)

        left.add_widget(leftGrid)
        root.add_widget(left)

        return root
if __name__ == "__main__":
    TestApp().run()

【讨论】:

以上是关于如何在 python kivy 中创建可滚动的 FloatLayout的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中创建可滚动的行

如何在 Bootstrap 中创建可滚动的列?

如何在 Android 中创建可滚动的轮播页面?

如何在 vuetify 中创建可滚动的 v-list?

在Python中创建可执行的符号链接?

Python:如何在 Kivy 中创建一个简单的框架?