Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kivy-创建可伸缩的滚动视图_Python_Scrollview_Kivy - Fatal编程技术网

Python Kivy-创建可伸缩的滚动视图

Python Kivy-创建可伸缩的滚动视图,python,scrollview,kivy,Python,Scrollview,Kivy,我试图创建一个scrollview,通过下拉菜单选择一个选项,然后按+按钮将两个标签添加到scrollview中。这是我目前的代码: from kivy.app import App from kivy.uix.label import Label from kivy.lang import Builder from kivy.properties import ListProperty from kivy.uix.boxlayout import BoxLayout from kivy.uix

我试图创建一个scrollview,通过下拉菜单选择一个选项,然后按+按钮将两个标签添加到scrollview中。这是我目前的代码:

from kivy.app import App
from kivy.uix.label import Label
from kivy.lang import Builder
from kivy.properties import ListProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput

from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition

class CaloriesScreen(Screen):
    pass

class theScreenManager(ScreenManager):
    pass

root_widget = Builder.load_string('''
#:import FadeTransition kivy.uix.screenmanager.FadeTransition

theScreenManager:
    CaloriesScreen:

<CaloriesScreen>:
    name: 'calories'
    BoxLayout:
        orientation: 'vertical'

        BoxLayout:
            orientation: 'horizontal'
            size_hint: 1, .3
            Button:
                text: '<'
                size_hint: .1, 1
                font_size: 75
                background_normal: ""
                background_color: 0.18, .5, .92, 1
                on_release: app.root.current = 'main' 

            Label:
                text: 'Calories'
                halign: 'left'
                font_size: 50
                canvas.before:
                    Color:
                        rgb: 0.18, .5, .92
                    Rectangle:
                        pos: self.pos
                        size: self.size
            Widget:
                size_hint: .1, 1
                canvas.before:
                    Color:
                        rgb: 0.18, .5, .92
                    Rectangle:
                        pos: self.pos
                        size: self.size

        BoxLayout:
            orientation: 'horizontal'
            size_hint: 1, .4
            spacing: 50
            canvas.before:
                Color:
                    rgb: 0.8, 0.8, 0.8
                Rectangle:
                    pos: self.pos
                    size: self.size
            Label:
                text: 'Recipes'
                font_size: 30
                color: 0.18, .5, .92, 1


            Button:
                id: btn
                text: 'Select a recipe...'
                font_size: 30
                on_release: dropdown.open(self)
                height: '48dp'
                pos_hint: { 'top' : 0.75}
                size_hint: .8, .5

            DropDown:

                id: dropdown
                on_parent: self.dismiss()
                on_select: btn.text = '{}'.format(args[1])


                Button:
                    text: 'Simple Cheese Omelette'
                    size_hint_y: None
                    height: '48dp'
                    on_release: dropdown.select('First Item')

                Button:
                    text: 'Burger'
                    size_hint_y: None
                    height: '48dp'
                    on_release: dropdown.select('Second Item')

                Button:
                    text: 'Tomato and Caper Linguine'
                    size_hint_y: None
                    height: '48dp'
                    on_release: dropdown.select('Third Item')


            Button:
                text: '+'
                font_size: 30
                background_normal: ""
                background_color: 0.18, .5, .92, 1
                pos_hint: { 'top' : 0.65}
                size_hint: .1, .3
                #on_release:
            Widget:
                size_hint: .02, 1

        BoxLayout:
            orientation: 'horizontal'
            size_hint: 1, .2
            canvas.before:
                Color:
                    rgb: 0.18, .5, .92
                Rectangle:
                    pos: self.pos
                    size: self.size
            Label:
                text:'Food'
                color: (1, 1, 1, 1)
            Label:
                text:'Calories'
                color: (1, 1, 1, 1)

        ScrollView:
            scroll_timeout: 250
            scroll_distance: 20
            do_scroll_y: True
            do_scroll_x: False
            GridLayout:
                id: grid
                cols: 2
                spacing: 10
                padding: 10
                Label:
                    text:'Food'
                    color: (1, 1, 1, 1)
                Label:
                    text:'Calories'
                    color: (1, 1, 1, 1)


''')

class temprecipeapp(App):
    def build(self):
        return root_widget

if __name__ == "__main__":
    temprecipeapp().run()

滚动视图上的白色食品和卡路里标签就是例子。理想情况下,它们会浮到顶部,然后我可以从下拉列表中选择一个新选项,并向队列中添加更多内容。我该怎么办?当前,如果我在scrollview中添加大量堆叠的标签,则无法启用滚动

要创建一个适合两列(食物和卡路里)的项目,最好从表格标题(即食物和卡路里)中复制行为,并为它们创建一个单独的容器作为FoodItem,这只是一个BoxLayout

该FoodItem将具有两个StringProperties:

食物 卡路里 你可以通过root.food,root.carries在kv中访问它们

现在,要直接在kv中创建这样一个项目并将其放置到ScrollView中,您需要导入默认情况下不可用的项目。有了这些,您基本上可以做到:

Factory.MyWidget()
它将创建一个小部件的实例,您需要将其传递给GridLayout的add_小部件方法

代码编辑:


也考虑使用一个纯粹的下拉,因为它使事情变得更容易,并且你会避免对父行为。

< P>创建一个适合两栏、食物和热量的项目,最好是从表标题中复制行为,即食物和热量,并为它们创建一个单独的容器作为食物。这只是一个盒子布局

该FoodItem将具有两个StringProperties:

食物 卡路里 你可以通过root.food,root.carries在kv中访问它们

现在,要直接在kv中创建这样一个项目并将其放置到ScrollView中,您需要导入默认情况下不可用的项目。有了这些,您基本上可以做到:

Factory.MyWidget()
它将创建一个小部件的实例,您需要将其传递给GridLayout的add_小部件方法

代码编辑:

也考虑使用一个纯的下拉,因为它使事情变得简单,并且避免了父行为。