我的应用包含2个屏幕:
第一个屏幕:欢迎屏幕-显示欢迎消息的标签和进入下一个屏幕的按钮
第二屏幕:动态创建的标签
我想在scrollview
第二个屏幕上实现一个包含动态创建标签的屏幕。我试过了,但是scrollview
没有用。
以下是我的代码:
main.py
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
class Welcome(Screen):
pass
class Second(Screen):
dynamic_labels = []
texts = ['Label '+str(i) for i in range(1,20)]
no_widgets = len(texts)
def set_data(self):
for data,wid in zip(self.texts,self.dynamic_labels):
wid.text = data
class WindowManager(ScreenManager):
pass
class SampleApp(App):
def build(self):
return Builder.load_file("questapp\mytest.kv")
if __name__ == "__main__":
SampleApp().run()
mytest.kv
#: import Label kivy.uix.label.Label
WindowManager:
Welcome:
Second:
<Welcome>
name: "Welcomescreen"
GridLayout:
cols:1
Label:
text: "Welcome to my app"
Button:
text: "Proceed"
on_press:
app.root.current = "screen2"
<Second>
name: "screen2"
FloatLayout:
ScrollView:
do_scroll_y: True
do_scroll_x: True
GridLayout:
spacing:20
padding: 20
size_hint: 1,None
height:500
cols:1
on_kv_post:
for i in range(root.no_widgets):root.dynamic_labels.append(Label(size_hint = (0.1,None),height = 30))
for wid in range (root.no_widgets):self.add_widget(root.dynamic_labels[wid])
root.set_data()
只需设置GridLayout
的height
到self.minimum_height
。
这就是您的Second
kv规则应为:
<Second>
name: "screen2"
FloatLayout:
ScrollView:
do_scroll_y: True
do_scroll_x: True
GridLayout:
spacing:20
padding: 20
size_hint: 1,None
# height: 500
height: self.minimum_height
cols:1
on_kv_post:
for i in range(root.no_widgets): root.dynamic_labels.append(Label(size_hint = (0.1,None),height = 30))
for wid in range (root.no_widgets): self.add_widget(root.dynamic_labels[wid])
root.set_data()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句