【问题标题】:How can I enable scrolldown functionality when needed?如何在需要时启用向下滚动功能?
【发布时间】:2018-11-19 21:12:36
【问题描述】:

我正在使用 Kivy 构建一个应用程序,该应用程序将包含一堆下拉项。当我制作比屏幕更大的手风琴时,我得到“没有足够的空间来显示所有孩子”。因为,我有太多的孩子要在一页上显示,而且我不想一次显示所有的孩子;我如何告诉程序不要担心它而只启用向下滚动功能?对于我的生活,我在互联网上找不到任何大型手风琴具有附加滚动功能的示例。我在互联网上找到的所有解决方案都只是说“腾出更多空间”。

下面的代码创建了 30 个不适合屏幕的手风琴项目并产生错误。提前感谢您,如果您需要更多说明,我将很乐意提供。

from kivy.uix.accordion import Accordion, AccordionItem
from kivy.uix.label import Label
from kivy.app import App


class AccordionApp(App):
    def build(self):
        root = Accordion(orientation='vertical')
        for x in range(30):
            item = AccordionItem(title='Title %d' % x)
            item.add_widget(Label(text='Very big content\n' * 10))
            root.add_widget(item)
        return root


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

【问题讨论】:

  • 我认为这是一个错误,我建议报告它
  • 我怀疑将其报告为错误会有所帮助,因为它的行为与documented 完全相同。也许是一个功能请求建议将Accordion 容器放置在ScrollView 中。
  • @JohnAnderson 鉴于 Accordion 似乎不允许该功能,您是否有任何关于允许对类似内容进行编程的 python GUI 的建议?或者最好是跳出 Python 学习 HTML/CSS/JAVASCRIPT 以获得更多控制权。

标签: python python-3.x kivy


【解决方案1】:

你可以调整Accordion的大小,如果你能计算出需要的大小,把Accordion放在ScrollView中。例如:

from kivy.core.window import Window
from kivy.uix.accordion import Accordion, AccordionItem
from kivy.uix.label import Label
from kivy.app import App
from kivy.uix.scrollview import ScrollView


class AccordionApp(App):
    def build(self):
        root = ScrollView(size_hint=(None, 1), size=(Window.width, Window.height))
        acc = Accordion(size_hint_x=None)
        width_calc = 200     # guess at width needed for one open item content
        root.add_widget(acc)
        for x in range(30):
            item = AccordionItem(title='Title %d' % x)
            item.add_widget(Label(text='Very big content\n' * 10))
            acc.add_widget(item)
            width_calc += item.min_space    # add minimum width for an item
        acc.width = width_calc              # set Accordion width
        return root


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

【讨论】:

  • 谢谢约翰!这正是我一直在寻找的。作为一个附带问题(也许我应该为此提出一个新的 Stack Overflow 问题),在全屏模式下,滚动视图似乎不会占据整个窗口宽度。这是因为程序仍在使用非全屏“window.width”变量吗?如果我调整框架大小,有没有办法让这个变量动态化?
  • 我想如果你只是将ScrollView创建行更改为root = ScrollView()ScrollView应该会填满整个屏幕。
  • 太棒了!非常感谢约翰的帮助。
猜你喜欢
  • 2021-08-29
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 2023-02-25
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多