python 如何让 ScrollView 重置到屏幕顶部
How to get ScrollView to reset to the top of the screen in python
我正在我的应用程序中重复使用屏幕。我第一次回到上一个屏幕时,滚动条会重置到顶部,但在第三次或之后的任何时候都不会。
我正在设计一个应用程序,用户可以通过单击第一个屏幕上的按钮从选项列表中进行选择。根据他们点击的是哪个,不同的信息列表将显示在第二个屏幕上。我需要在 python 中添加按钮和标签,因为按钮的信息和数量是动态的。我不知道如何将滚动条重置到屏幕顶部。我在按下按钮后 运行s 的函数中添加了一行 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
你的行 ScrollView.scroll_y=1
没有做任何事情,因为它在 class ScrollView
上设置了一个值,而不是你在显示器中显示的任何实例。
尝试在 add_buttons
方法的末尾添加行:self.ids.scrollview.scroll_y = 1
(您可以在 add_labels
方法的末尾添加相同的行)。
我正在我的应用程序中重复使用屏幕。我第一次回到上一个屏幕时,滚动条会重置到顶部,但在第三次或之后的任何时候都不会。
我正在设计一个应用程序,用户可以通过单击第一个屏幕上的按钮从选项列表中进行选择。根据他们点击的是哪个,不同的信息列表将显示在第二个屏幕上。我需要在 python 中添加按钮和标签,因为按钮的信息和数量是动态的。我不知道如何将滚动条重置到屏幕顶部。我在按下按钮后 运行s 的函数中添加了一行 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
你的行 ScrollView.scroll_y=1
没有做任何事情,因为它在 class ScrollView
上设置了一个值,而不是你在显示器中显示的任何实例。
尝试在 add_buttons
方法的末尾添加行:self.ids.scrollview.scroll_y = 1
(您可以在 add_labels
方法的末尾添加相同的行)。