kivy自定义控件绑定错误

4 投票
1 回答
2433 浏览
提问于 2025-04-18 12:59

我正在尝试用Kivy学习Python,做一个简单的俄罗斯方块游戏。我想创建一个大小为20x20的自定义小部件。当我把它添加到浮动布局中并运行下面的代码时,出现了以下错误:

错误信息:

File "D:\OS Files\workspace\Tetris\holder.py", line 10, in __init__ self.add_widget(c)
File "C:\Kivy180\kivy\kivy\uix\floatlayout.py", line 115, in add_widget pos_hint=self._trigger_layout)
TypeError: descriptor 'bind' of 'kivy._event.EventDispatcher' object needs an argument

代码:

holder.py 文件:

from items import Cell

class Holder(FloatLayout):
    def __init__(self, **kwargs):
        super(Holder,self).__init__(**kwargs)
        self.size=(300,300)
        c=Cell
        #c.pos= (20,20)
        self.add_widget(c)
        #self.add_widget(c)

items.py 文件:

from kivy.uix.widget import Widget
from kivy.graphics import *

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

        self.height=50
        self.width=50

main.py 文件:

from kivy.app import App
from holder import Holder

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

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

你能告诉我我哪里出错了吗?我现在连第一步都卡住了。关于这个错误,我没有写任何事件,只是一个小部件类。你能帮我解释一下我在理解Kivy时哪里搞错了吗?

1 个回答

3
c=Cell

我猜你想让 c 成为 Cell 类的一个实例。如果你想这样做,你需要执行以下操作:

c=Cell()

撰写回答