如何让 ScrollView 在 python 中重置到屏幕顶部
Posted
技术标签:
【中文标题】如何让 ScrollView 在 python 中重置到屏幕顶部【英文标题】:How to get ScrollView to reset to the top of the screen in python 【发布时间】:2019-07-03 06:12:23 【问题描述】:我在我的应用程序中重复使用屏幕。第一次返回上一个屏幕时,滚动条会重置到顶部,但在第三次或之后的任何时候都不会。
我正在设计一个应用程序,用户可以通过单击屏幕一上的按钮从选项列表中进行选择。根据他们点击的内容,不同的信息列表将显示在屏幕二上。我需要在 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】:您的行 ScrollView.scroll_y=1
没有做任何事情,因为它在类 ScrollView
上设置了一个值,而不是您在显示器中显示的任何实例。
尝试在 add_buttons
方法的末尾添加以下行:self.ids.scrollview.scroll_y = 1
(您可以在 add_labels
方法的末尾添加同一行)。
【讨论】:
以上是关于如何让 ScrollView 在 python 中重置到屏幕顶部的主要内容,如果未能解决你的问题,请参考以下文章
在 SwiftUI 中制作聊天应用程序:如何让 ScrollView 在键盘出现时保持原位?
如何在 Python/Kivy 中实现 ScrollView