2016-04-23 2 views
1

Я пытаюсь создать приложение, отображающее одно изображение. Когда я нажимаю какую-то кнопку, функция меняет источник этого изображения, поэтому это изображение изменится. Итак, я попытался изменить файл 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, так что это не работает. Очень спасибо всем, за вопрос моего новичка. Хорошие выходные.

ответ

0

Дело в том, что ваш текущий код не указан 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 
+1

Вам не нужно писать 'root.ids.image',' image' должно быть достаточно. – jligeza

Смежные вопросы