Python Kivy:ValueError:空模块名称。我究竟做错了什么?

时间:2015-04-24 00:15:34

标签: python import kivy

我正在尝试运行todo列表程序,这是我在Pycharm中收到的错误:

文件“/Applications/Kivy.app/Contents/Resources/kivy/kivy/lang.py”,第1085行,在execute_directives中      mod = import ('。'。join(package.split('。')[: - 1]))  ValueError:空模块名称

使用退出代码1完成处理

以下是main.py

中的代码
+

以下是todo.kv中的代码

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.listview import ListItemButton


class TaskButton(ListItemButton):
    pass


class TodoRoot(BoxLayout):
    task_input = ObjectProperty()
    task_list = ObjectProperty()

    def add_task(self):
        self.task_list.adapter.data.extend([self.task_input.text])
        self.task_list._trigger_reset_populate()

    def del_task(self, *args):
        if self.task_list.adapter.selection:
            selection = self.task_list.adapter.selection[0].text
            self.task_list.adapter.data.remove(selection)
            self.task_list._trigger_reset_populate()


class TodoApp(App):
    def build(self):
        return TodoRoot()


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

1 个答案:

答案 0 :(得分:2)

您的代码存在其他问题,但您获得的导入错误似乎来自

#: import main todo

如果这是为了导入main.py,Kivy已经提供了一种方法,使用“app”关键字将主脚本中的结构引用到.kv文件中(参见here)。例如,在.kv文件的最后一行,

ListAdapter(data=[], cls=main.TaskButton)

可以替换为

ListAdapter(data=[], cls=app.TaskButton)

另一个问题是,.kv文件中只能有一个根小部件,代码中提供了三个小部件:TodoRoot,BoxLayout和ListView。只能将一个窗口小部件定义为root(没有尾部的“<>”)。也许存在缩进问题,所有其他小部件都应该在TodoRoot中?