如何更改kivy中的图像源?

Posted

技术标签:

【中文标题】如何更改kivy中的图像源?【英文标题】:How to change the image source in kivy? 【发布时间】:2016-08-17 03:39:19 【问题描述】:

我正在尝试制作一个显示一张图片的应用。当我单击某个按钮时,该功能将更改此图像的来源,因此此图像会更改。所以,我尝试只更改行 image.source,我认为正确的方法是使用 stringproperty,但我也没有成功。所以,我的代码是: .py

class PrimeiroScreen(Screen):
    def __init__(self, **kwargs):
        self.name = 'um'
        super(Screen,self).__init__(**kwargs)
        fonte = StringProperty('cafe.jpg')

    def fc1(self):
        self.ids.image.source = (fonte)
        self.ids.image.fonte = "cafe.jpg"
        #self.ids.image.source = "cafe.jpg"


class MyImage(Image):
    fonte = StringProperty()

class RootScreen(ScreenManager):
    pass

和.kv:

<RootScreen>:
    PrimeiroScreen:

<PrimeiroScreen>:
    StackLayout:
        orientation: 'tb-rl'
        ScrollView:
            #size: 100, 100
            #pos_hint: 'center_x': .5, 'center_y': .5
            GridLayout:
                cols: 1
                padding: 10, 10
                spacing: 5, 5
                size_hint: (None, None)
                size_hint_y:  None
                width: 500
                height: self.minimum_height
                Button:
                    text: "1"
                    #color: 0,0,0,1
                    font_size: '20dp'
                    size: (200, 40)
                    size_hint: (None, None)
                    on_release: root.fc1()
    AnchorLayout:
    Image:
        source:'logo.jpg'
        id: image

我正在学习 AnchorLayout 和 StackLayout,所以它不起作用。 非常感谢大家,感谢我的新手问题。周末愉快。

【问题讨论】:

【参考方案1】:

问题是您当前的代码没有定义fonte(至少对我来说是复制和粘贴),您需要使用self.fonte

但是无论如何,你应该直接访问source,否则你需要创建另一个函数来处理你的属性更新并在它发生变化时做一些事情,即将它传递给source,这已经是StringProperty ,因此您将真正绕过解决方案,直到找到它为止。

<RootScreen>:
    PrimeiroScreen:

<PrimeiroScreen>:
    StackLayout:
        orientation: 'tb-rl'
        ScrollView:
            #size: 100, 100
            #pos_hint: 'center_x': .5, 'center_y': .5
            GridLayout:
                cols: 1
                padding: 10, 10
                spacing: 5, 5
                size_hint: (None, None)
                size_hint_y:  None
                width: 500
                height: self.minimum_height
                Button:
                    text: "1"
                    color: 0,0,0,1
                    font_size: '20dp'
                    size: (200, 40)
                    size_hint: (None, None)
                    on_release: image.source='newcafe.png'
    MyImage:
        source: 'cafe.jpg'
        id: image

【讨论】:

不用写root.ids.image,单独写image就够了。

以上是关于如何更改kivy中的图像源?的主要内容,如果未能解决你的问题,请参考以下文章

在kivy中单击时如何更改按钮的背景图像?

jquery中的图像源更改事件

Kivy 按钮背景图像大小

如何在 kivy 屏幕更改中调用类中的 def

源更改时刷新图像[重复]

更改背景画布 kivy