2017-06-27 43 views
3

我有一個在我的Python代碼中的kv段。無法在Kivy中爲動畫選擇ID

我想要做的是選擇此按鈕併爲其設置動畫。動畫本身是通過按NoButton觸發的。 NoButton有一個本身就是根小部件類的子類。不幸的是,儘管已經能夠成功地引用id的kv代碼,我似乎無法實際使用它。

NoButton的結果絕對沒有。沒有錯誤,沒有。如果我嘗試打印ID是我得到的是它引用了按鈕的位置:

<__main__.MainButton object at 0x7fd5db0d5590>

下面是KV代碼片段:

<MainClass>: 
<MainScreen>: 
    id: main 

    AnchorLayout: 
     size: root.size 
     anchor_x: 'center' 
     anchor_y: 'center' 
     padding: 0, 0, 0, 50 
     MainButton: 
      id: pics 
      rgba: 1,5,1,1 
      size_hint_x: None 
      size_hint_y: None 
      height: main.height/1.5 
      width: main.width/1.5 

和蟒蛇:

class MainScreen(Screen): 
    pass 

class MainButton(Button): 
    pass 

class NoButton(ButtonBehavior, Image, MainClass): 
    def on_press(self):  
     anim = Animation(x=300, y=300) 
     anim.start(MainButton()) 
     print(MainScreen().ids.pics) 

你會注意到anim.start引用類而不是id在這裏。不幸的是它產生了相同的結果;一點都沒有。

創建pics作爲對象屬性並聲明在kv中也無法工作。

我真的在這裏完全無能爲力。我已經瀏覽了幾個稍微類似的問題,但在深入kivy開發的幫助/指南方面實際上並不多。

我使用Python 3.5.3和1.9.2 Kivy,裝置0

希望瞭解在正確的方向:)

回答

2

您正在創建新的對象,而不是引用任何幫助/建議或指針退出者

anim.start(MainButton()) #new MainButton Object :(
    print(MainScreen().ids.pics) #also a new MainScreen object 

我沒有在你的代碼中是NoButton看,但應在MainScreen 實例得到保持,並從中提取MainButton 實例

main_button = main_screen.ids.pics 
ani.start(main_button) 

如果會後可運行的例子我也許能幫助你更多,我猜...

+0

main_screen不能被識別:\ – DevRobot

+0

「* main_screen *」只是一個例子,沒有一個工作的例子,它很難猜測你的應用程序的流程...... –

+0

這就是所有涉及我想要做的事情。我只是不知道如何從kv代碼成功訪問id – DevRobot