2015-10-23 38 views
1

我剛剛發現了kivy,並決定嘗試將它作爲我下一個軟件項目的GUI框架。我通過教程工作,現在想創建我自己的小部件。但是,我有一些問題讓小部件正確調整大小。下面是一個最小的(非)工作實施例:自動調整大小的定製kivy部件

import kivy 
kivy.require('1.9.0') 

from kivy.app import App 
from kivy.uix.layout import Layout 
from kivy.graphics import Color, Rectangle 


class TestWidget(Layout): 

    def __init__(self, **kwargs): 
     super(TestWidget, self).__init__(**kwargs) 
     with self.canvas: 
      Color(1, 1, 1) 
      self.rect = Rectangle(pos=(0,0), size=(1,1)) 
     self.bind(pos=self.update) 
     self.bind(size=self.update) 

    def update(self, *args): 
     self.rect.pos = self.pos 
     self.rect.size = self.size 


class TestApp(App): 

    def build(self): 
     return TestWidget() 


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

我預期這顯示一個白色窗口,其中白色矩形與窗口調整大小。但是,啓動時只能正確設置大小,並且不會再次調用該方法。我究竟做錯了什麼?

我在這裏找到了有關StackOverflow的工作示例,但它們都使用我想避免的kv語言(必須有一種方法才能使它在沒有kv語言的情況下工作...)。

編輯:我運行kivy 1.9.0,pygame的1.9.2a0和Python 3.4.1 Linux上

任何幫助深表感謝。

+0

你的代碼似乎是正確的,它在這裏工作得很好。另外,我不建議避免使用kv,但確實不必使用它。 – inclement

+0

在這個例子中,我試圖避免kv來理解kivy是如何在內部工作的。我已經懷疑這是我的設置問題。你能告訴我你使用的是哪個Python版本的kivy嗎? –

回答

1

好吧,我找到了解決方案。這似乎是pygame問題。我現在強迫kivy使用SDL2,並且工作完美無瑕。