如何在Kivy中返回布局中的小部件?

2024-05-16 07:16:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个非常简单的Kivy应用程序,我有不同的布局。我需要把我的应用程序分成一个GridLayout(rows=2),这样我就可以在屏幕的顶部有一个“header”,在屏幕的其余部分有一个carousel或{}。在

我的问题是我不知道如何在布局中返回我的小部件。在

我的代码是:

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()

如您所见,我需要这些2return,以便在布局中显示我的旋转木马,但是这样,只有旋转木马才会出现在我的应用程序中。如果我删除return carousel,那么它将无法滑动图像,这有点像布局刷新阻止旋转木马正常传递图像。在

有什么想法我可以重新构造代码在我的布局内有一个好的旋转木马?在


Tags: posadd应用程序sizereturn屏幕布局widget
2条回答

只需删除return carousel行,您只能返回一次,因此您需要返回包含所有其他控件的小部件。在

另外,您还将Clock.schedule_interval调用放在循环中,因此每秒都有大量的调用存在元素,结果是不管发生什么,它都将执行一个完整的循环。这个调用只做一次,所以把它移出循环。在

大量编辑:

从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。在

相关问题 更多 >