簡體   English   中英

Float Layout使用Kivy添加自定義大小的小部件

[英]Float Layout adding custom sized widgets with Kivy

我是python和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

問題是,雖然我要添加2個具有不同pos的單元格,但仍然使它們重疊,並且它們都僅顯示在角落。

在此處輸入圖片說明 你能告訴我我哪里出了問題。

編輯:我已更新單元格的代碼,如下所示:

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

但是,現在我收到錯誤,因為“ TypeError:callback_pos()接受2個位置參數,但給出了3個”

您的繪圖代碼是

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教程嗎? 我建議這樣做。 您可能也對我的視頻教程感興趣。

編輯:回復您自己的編輯:

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

您應該將此行放在__init__ ,因為它是一個類級別的變量,因此您可以將其傳遞給每個實例相同的矩形。 那實際上可能不會崩潰並在這里起作用,但這不是您的意思,因此可能是不好的做法。

但是,現在我收到錯誤,因為“ TypeError:callback_pos()接受2個位置參數,但給出了3個”

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM