我制作了一个非常简单的Kivy应用程序,其中我有不同的布局。我需要将我的应用分成GridLayout(rows=2)
,这样我可以在屏幕顶部显示“标题”,并在屏幕的其余部分显示carousel
或accordion
。
我的问题是我无法弄清楚如何在布局中返回我的小部件。
这是我的代码:
class Logo(App):
def build(self):
layout = GridLayout(rows=2)
layoutTop = FloatLayout()
layoutMid = FloatLayout()
logo = Image(source='imagine.png',size_hint=(.25,.25),pos=(30,380))
titre = Label(text='#LeCubeMedia',font_size='40sp',pos=(0,280))
ip = Label(text='192.168.42.1',font_size='25sp',pos=(250,280))
carousel = Carousel(direction='right', loop = True, size_hint=(.5,.5),pos=(300,180))
for i in range(2):
src = "imagine.png"
image = Factory.AsyncImage(source=src, allow_stretch=True)
carousel.add_widget(image)
Clock.schedule_interval(carousel.load_next, 1)
return carousel ------> 1st Return
layoutTop.add_widget(titre)
layoutTop.add_widget(logo)
layoutTop.add_widget(ip)
layoutMid.add_widget(carousel)
layout.add_widget(layoutTop)
layout.add_widget(layoutMid)
return layout ------> 2nd Return
if __name__ == '__main__':
Logo().run()
正如您所看到的,我需要那些2 return
才能在我的布局中显示我的轮播,但这样只有轮播才会显示在我的应用中。如果我删除了return carousel
,它会在刷图像时失败,有点像布局刷新会阻止旋转木马正常传递图像。
我有什么想法可以重新构造代码,在我的布局中有一个好的轮播?
答案 0 :(得分:1)
只需删除return carousel
行,您只能返回一次,因此您需要返回包含所有其他内容的小部件。
此外,您将Clock.schedule_interval
调用放入循环中,因此每秒都会调用有多少元素,结果是无论如何都会完成一个完整的循环。只做一次这个调用,所以把它移出循环。
答案 1 :(得分:1)
大规模编辑:
从GitHub下载最新版本,因为load_next
问题已在那里得到解决。 运行以下代码会产生正确的预期行为。
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.carousel import Carousel
from kivy.uix.image import Image
from kivy.factory import Factory
from kivy.clock import Clock
class Logo(App):
def build(self):
main_layout = GridLayout(cols=1, rows=2)
top_row = GridLayout(cols=3, rows=1)
bottom_row = GridLayout(cols=1)
logo = Image(source='bird.jpg')
title = Label(text='Just three birds.',font_size='40sp')
ip = Label(text='tweet\ntweet\ntweet',font_size='20sp')
carousel = Carousel(direction='right', loop=True, size_hint=(.5,.5),pos=(0,180))
for i in range(1,4):
src = "bird%s.jpg" % str(i)
image = Factory.AsyncImage(source=src, allow_stretch=True)
carousel.add_widget(image)
Clock.schedule_interval(carousel.load_next, 1.0)
top_row.add_widget(logo)
top_row.add_widget(title)
top_row.add_widget(ip)
bottom_row.add_widget(carousel)
main_layout.add_widget(top_row)
main_layout.add_widget(bottom_row)
return main_layout
if __name__ == '__main__':
Logo().run()
确保将图像文件更改为您正在使用的图像文件以及标签/文本。它现在应该工作。
观看演示视频here。