【问题标题】:Kivy Carousel and Button WidgetsKivy 轮播和按钮小部件
【发布时间】:2017-11-15 16:07:39
【问题描述】:

感谢我上一篇文章中的一些朋友,我有一个成功运行的 Kivy Carousel,现在我正在尝试在轮播的最后一页上添加一个“开始”类型的按钮,将用户带到主应用程序视图点击时。

我有一种感觉,我需要实现诸如“如果当前图片是'n'”之类的逻辑,以将按钮仅应用于最后一个屏幕,但我不确定如何使其工作。我到处寻找解决方案,但没有找到与这个特定概念相关的任何东西..

这是我的轮播代码,谢谢!!:

from kivy.app import App
from kivy.uix.carousel import Carousel
from kivy.uix.image import AsyncImage

class CarouselApp(App):

    def build(self):

        carousel = Carousel(direction='right')

        #For each loop to take each image from directory and place in carousel
        for i in range(0, 3):
            src = "carousel/%s.png" % str(i)
            image = AsyncImage(source=src, allow_stretch=True)
            carousel.add_widget(image)

        return carousel

CarouselApp().run()

【问题讨论】:

    标签: python-3.x python-2.7 kivy kivy-language


    【解决方案1】:

    在轮播的最后一项上,您必须添加包含图像和按钮的布局,而不是仅添加图像:

    带有盒子布局

    from kivy.app import App
    from kivy.uix.carousel import Carousel
    from kivy.uix.image import AsyncImage
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.button import Button
    
    class CarouselApp(App):
    
        def build(self):
    
            carousel = Carousel(direction='right')
    
            #For each loop to take each image from directory and place in carousel
            for i in range(0, 3):
                if i == 2:
                    src = "carousel/%s.png" % str(i)
                    button = Button(text='Get Started', on_press=self.get_started, size_hint_y=.1)
                    image = AsyncImage(source=src, allow_stretch=True, size_hint_y=.9)
                    layout = BoxLayout(orientation='vertical')
                    layout.add_widget(image)
                    layout.add_widget(button)
                    carousel.add_widget(layout)
                else:
                    src = "carousel/%s.png" % str(i)
                    image = AsyncImage(source=src, allow_stretch=True)
                    carousel.add_widget(image)
            return carousel
    
        def get_started(self, *args):
            print "let's start"
    
    CarouselApp().run()
    

    带有浮动布局

    ...
    from kivy.uix.floatlayout import FloatLayout
    
    ...
    
    class CarouselApp(App):
        def build(self):
            carousel = Carousel(direction='right')
            #For each loop to take each image from directory and place in carousel
            for i in range(0, 3):
                if i == 2:
                    src = "carousel/%s.png" % str(i)
                    button = Button(text='Get Started', on_press=self.get_started, size_hint=(.5,.1), pos_hint={'center_x': .5, 'y': .1})
                    image = AsyncImage(source=src, allow_stretch=True, size_hint=(1, 1), pos_hint={'center_x': .5, 'y': 0})
                    layout = FloatLayout()
                    layout.add_widget(image)
                    layout.add_widget(button)
                    carousel.add_widget(layout)
    
    ...
    

    【讨论】:

    • 哦!好的!这很有道理,再次感谢您!
    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 2021-10-14
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多