我正在尝试运行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()
答案 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中?