2014-07-11 84 views
0

我是新來的Python和kivy,我試圖通過使使小部件來學習:浮動佈局添加自定義尺寸的部件與Kivy

Main.py文件:

class start(App): 
    def build(self): 
     return Holder() 

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

代碼:

class Holder(FloatLayout): 
    def __init__(self, **kwargs): 
     self.size=(300,300) 
     super(Holder,self).__init__(**kwargs) 

     c=Cell() 
     c.pos=(100,100) 
     self.add_widget(c) 
     print(str(c.pos)) 

     d=Cell() 
     d.pos=(100,0) 
     self.add_widget(d) 
     print(str(d.pos)) 

class Cell(Widget): 
    def __init__(self, **kwargs): 
     super(Cell,self).__init__(**kwargs) 
     with self.canvas: 
      Color(1, 0, 0) 
      Rectangle(size=(50, 50)) 

     self.height=50 
     self.width=50 

問題是,althogh我添加了2個不同位置的單元格,我仍然讓它們重疊並且它們都只顯示在角落。

enter image description here 您能否讓我瞭解我出錯的地方。

編輯: 我已經更新了代碼細胞如下:

class Cell(Widget): 
    rect=Rectangle(size=(50, 50)) 
    def __init__(self, **kwargs): 
     super(Cell,self).__init__(**kwargs) 
     self.canvas.add(Color(1, 0, 0)) 
     self.canvas.add(self.rect) 
     self.bind(pos=self.callback_pos) 

    def callback_pos(self, value): 
     self.rect.pos=self.pos 

然而,現在我接收到錯誤爲「類型錯誤:callback_pos()採用2的位置參數,但3分別給予」

回答

1

繪製代碼是

with self.canvas: 
      Color(1, 0, 0) 
      Rectangle(size=(50, 50)) 

...而這正是你所看到的,這兩個矩形具有尺寸(50,50),並在0的默認位置(, 0),因爲你沒有設置。

如果要使矩形與小部件的大小和形狀一起顯示,則必須自己綁定 - 即保持對矩形的引用,並使用小部件bind方法調用每次更新其位置的函數小部件位置發生變化。

這是一個有點冗長,這是我們推薦使用kv語言的一個原因 - 它爲您做到了這一點!

<Cell>: 
    canvas: 
     Color: 
      rgb: 1, 0, 0 
     Rectangle: 
      pos: self.pos 
      size: 50, 50 

無論何時發生變化,這將自動更新pos以匹配self.pos。

你做了kivy pong教程嗎?我建議這樣做。您可能也對我的video tutorials感興趣。

編輯:在回答你自己編輯:

rect=Rectangle(size=(50, 50)) 

你應該把這個線__init__,你會傳遞相同的矩形,每個實例,因爲它是一個類級別的變量的方式。那可能實際上不會崩潰並且在這裏工作,但它不是你的意思,並且可能是由於這個原因的不好的做法。

However, now I am receiving the error as "TypeError: callback_pos() takes 2 positional arguments but 3 were given"

您有參數self, value。綁定(以及所有的kivy屬性綁定)實際上調用self, instance, value。只需添加這個額外的參數(或使用*args來捕獲它們)。

+0

我已經更新了代碼,但它仍然是一樣的,我沒有在這裏使用KV lang,我只是做了代碼,並且添加了新的代碼來問題,請你糾正我。 – surpavan

+0

看到您的網站,不僅有視頻,但隨着文章將是偉大的 – surpavan

+0

謝謝你分享你的知識,代碼現在工作。 – surpavan