如何使ScrollView重置为python屏幕顶部

时间:2019-02-09 00:17:02

标签: python-3.x kivy kivy-language

我正在重复使用应用程序中的屏幕。第一次返回上一个屏幕时,滚动将重置到顶部,但是不会在第三次或之后的任何时间显示。

我正在设计一个应用程序,通过单击屏幕上的按钮,用户可以从选项列表中进行选择。根据他们单击的内容,将在屏幕2上显示不同的信息列表。我需要在python中添加按钮和标签,因为按钮的信息和数量将是动态的。我不知道如何将滚动条重置到屏幕顶部。我将ScrollView.scroll_y = 1行添加到了按下按钮后运行的函数中。这是第一次进行,但此后没有任何时间。因此,如果您两次运行该代码,屏幕将重置为顶部。但是,如果您第三遍查看它,它将不再在屏幕顶部开始。谁能告诉我是什么导致了这种现象,或者有人可以使用python语言更好地重置按钮按下时的屏幕吗?

这是我的main.py:

import kivy
kivy.require('1.10.1')
from kivy.app import App
from kivy.properties import ObjectProperty
from kivy.uix.textinput import TextInput
from kivy.lang.builder import Builder
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.screenmanager import ScreenManager, Screen

class MainScreen(Screen):
    pass
class FirstScreen(Screen):
    container=ObjectProperty(None)
    def add_buttons(self):
        self.ButtonList=[1,2,3,4,5,6,7,8,9,10]
        for i in range(0,10):
            self.ButtonList[i]=Button(text='Button {}'.format(i), id=str(i), size_hint=(1,None), on_press=self.switchscreens)
            self.container.add_widget(self.ButtonList[i])
    def switchscreens(self,instance):
        self.container.clear_widgets()
        self.manager.current='secondscreen'
class SecondScreen(Screen):
    container=ObjectProperty(None)
    def add_labels(self):
        self.LabelList=[1,2,3,4,5,6,7,8,9,10]
        for i in range(0,10):
            self.LabelList[i]=Label(text='Label {}'.format(i), id=str(i), size_hint=(1,None))
            self.container.add_widget(self.LabelList[i])
        self.SwitchBackButton=Button(text='Main Screen', id='switchbutton', size_hint=(1,None), height=30, on_press=self.switchback)
        self.container.add_widget(self.SwitchBackButton)
    def switchback(self,instance):
        ScrollView.scroll_y=1
        self.container.clear_widgets()
        self.manager.current='main'
class ScreenManagement(ScreenManager):
    pass
presentation=Builder.load_file("Switch.kv")
class SwitchApp(App):
    def build(self):
        return presentation
SwitchApp().run()

还有Switch.kv:

ScreenManagement:
    name:'screen_manager'
    id:screenmanager
    MainScreen:
    FirstScreen:
        on_pre_enter:
            self.add_buttons()
    SecondScreen:
        on_pre_enter:
            self.add_labels()

<MainScreen>:
    id:main_screen
    name: 'main'
    ScrollView:
        id:scrollview
        name:'scrollview'
        GridLayout:
            cols:1
            padding:10
            spacing:10
            size_hint: None, None
            width:800
            height: self.minimum_height
            Label:
                text: 'Main Menu'
            Button:
                text: 'First Screen'
                size_hint: 1,None
                on_release: app.root.current= 'firstscreen'


<FirstScreen>:
    id:first_screen
    name: 'firstscreen'
    container:container
    ScrollView:
        id:scrollview
        name:'scrollview'
        GridLayout:
            id:container
            cols:1
            padding:10
            spacing:10
            size_hint: None, None
            width:800
            height: self.minimum_height

<SecondScreen>:
    id:second_screen
    name: 'secondscreen'
    container:container
    ScrollView:
        id:scrollview
        name:'scrollview'
        GridLayout:
            id:container
            cols:1
            padding:10
            spacing:10
            size_hint: None, None
            width:800
            height: self.minimum_height

1 个答案:

答案 0 :(得分:1)

您的行ScrollView.scroll_y=1不会执行任何操作,因为它是在类ScrollView上设置一个值,而不是您在显示中显示的任何实例。

尝试在self.ids.scrollview.scroll_y = 1方法的末尾添加行:add_buttons(并且可以在add_labels方法的末尾添加同一行)。