我在我的应用程序中重复使用屏幕。第一次返回到以前的屏幕时,滚动会重置到顶部,但第三次或之后不会发生重置。
我正在设计一个应用程序,用户可以通过单击屏幕一上的按钮从选项列表中选择。根据他们点击的选项,不同的信息列表将显示在屏幕二上。由于信息和按钮数目是动态的,因此我需要在Python中添加按钮和标签。我无法弄清如何将滚动重置到屏幕顶部。我在按下按钮后运行的函数中添加了ScrollView.scroll_y=1行。这在第一次运行时可以工作,但之后任何时间都不行。所以如果你运行代码两次,屏幕将重置到顶部。但如果你第三次运行它,它将不再从屏幕顶部开始。有人能告诉我是什么原因导致了这种行为吗,或者有人有更好的方法使用Python语言在按钮按下后重置屏幕吗?
这是我的main.py文件:
我正在设计一个应用程序,用户可以通过单击屏幕一上的按钮从选项列表中选择。根据他们点击的选项,不同的信息列表将显示在屏幕二上。由于信息和按钮数目是动态的,因此我需要在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