2014-01-31 69 views
2
from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.uix.button import Button 
from kivy.graphics import Color, Rectangle 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.image import Image 

class Imglayout(FloatLayout): 

    def __init__(self,**args): 
     super(Imglayout,self).__init__(**args) 

     with self.canvas.before: 
      Color(0,0,0,0) 
      self.rect=Rectangle(size=self.size,pos=self.pos) 

     self.bind(size=self.updates,pos=self.updates) 
    def updates(self,instance,value): 
     self.rect.size=instance.size 
     self.rect.pos=instance.pos 


class MainTApp(App): 

    im=Image(source='img1.jpg') 
    def build(self): 
     root = BoxLayout(orientation='vertical') 
     c = Imglayout() 
     root.add_widget(c) 


     self.im.keep_ratio= False 
     self.im.allow_stretch = True   
     cat=Button(text="Categories",size_hint=(1,.07)) 
     cat.bind(on_press=self.callback)   
     c.add_widget(self.im) 
     root.add_widget(cat);  
     return root 

    def callback(self,value): 
     self.im=Image(source='img2.jpg') 


if __name__ == '__main__': 
    MainTApp().run() 

我在這裏想要做的是更改圖像在應用程序啓動時顯示的對象創建期間首次加載,然後在按下按鈕cat時更改它。我正在試圖這樣做,但它沒有發生。我最終希望它可以通過滑動手勢進行更改(帶有一點點滑動動作,就像發生在手機中一樣)更改窗口小部件中的圖像 - Kivy - Python

我想要構建的是幻燈片,它會在t秒內更改圖像,除非已刷新,然後當一個新的圖像到來時,定時器重置 當按下類別按鈕時,圖像將不會出現,並有一個可供選擇的類別列表,當觸摸列表中的某個項目時,該列表中的圖像將爲顯示在屏幕上

最後,當一切都完成後,我想讓它自動檢測類別(基於指定位置中的目錄),然後所有圖像都可用(這並沒有明確地告訴它如何許多圖像和圖像)

但是,我不能做第一件事,所以我真的很想在這方面得到一些幫助。也許還有一些關於如何實現其他方面的指導。

回答

2
def callback(self,value): 
    self.im=Image(source='img2.jpg') 

你的問題是在回調的定義。您使用新來源創建了一個新的圖像,但您不會對它做任何操作,例如將其添加到您的小部件樹中。

你真正想要做的是修改現有圖像的來源:

def callback(self, instance, value): 
    self.im.source = 'img2.jpg' 

這將立即取代現有的圖像,這將在你的GUI立即更新的來源。請注意,我還添加了一個實例參數,該參數將傳遞給回調函數,以便您需要捕獲它,否則將因參數數量錯誤而崩潰。

此外,我會定義您的圖像內部構建而不是作爲一個級別的變量。我不確定目前的方式是否會造成問題,但在某些情況下可能會出現問題。

+0

你的方式。使用self.im.source。但是你所說的關於自我,實例,價值的東西。它只是給出錯誤,回調接受3個參數,但只有2個發送。我在文檔中看到有3個以及2個參數的回調。我無法弄清楚什麼時候應用什麼:S –

相關問題