以下是几个基于Python的移动应用开发教程、案例及相关项目资源的详细源码示例:
- 简单的待办事项应用
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.uix.recycleview import RecycleView
class TodoListApp(App):
def build(self):
self.title = "待办事项列表"
# 主布局
layout = BoxLayout(orientation='vertical')
# 输入框和添加按钮
self.task_input = TextInput(hint_text='输入待办事项', size_hint_y=None, height=40)
add_button = Button(text='添加', size_hint_y=None, height=40)
add_button.bind(on_press=self.add_item)
# 待办事项显示区域
self.task_list = RecycleView()
# 初始化任务列表
self.tasks = []
self.update_task_list()
# 添加组件到布局
layout.add_widget(self.task_input)
layout.add_widget(add_button)
layout.add_widget(self.task_list)
return layout
def add_item(self, instance):
task_text = self.task_input.text.strip()
if task_text:
self.tasks.append(task_text)
self.task_input.text = ''
self.update_task_list()
def update_task_list(self):
self.task_list.data = [{'text': task} for task in self.tasks]
if __name__ == '__main__':
TodoListApp().run()
- 带有用户交互的待办事项应用
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.uix.recycleview import RecycleView
from kivy.uix.checkbox import CheckBox
class TaskListItem(BoxLayout):
def __init__(self, task_text, delete_callback, **kwargs):
super().__init__(**kwargs)
self.checkbox = CheckBox()
self.label = Label(text=task_text)
self.delete_button = Button(text='删除')
self.checkbox.bind(active=lambda checkbox, state: self.toggle_completed(state))
self.delete_button.bind(on_press=lambda x: delete_callback(task_text))
self.add_widget(self.checkbox)
self.add_widget(self.label)
self.add_widget(self.delete_button)
def toggle_completed(self, is_checked):
self.label.color = (0.5, 0.5, 0.5, 1) if is_checked else (1, 1, 1, 1)
class TodoListApp(App):
def build(self):
self.title = "待办事项列表"
layout = BoxLayout(orientation='vertical')
self.text_input = TextInput(hint_text='输入待办事项', size_hint_y=None, height=40)
add_button = Button(text='添加', size_hint_y=None, height=40)
add_button.bind(on_press=self.add_item)
self.task_list = RecycleView()
self.tasks = []
layout.add_widget(self.text_input)
layout.add_widget(add_button)
layout.add_widget(self.task_list)
return layout
def add_item(self, instance):
task_text = self.text_input.text.strip()
if task_text:
self.tasks.append(task_text)
self.text_input.text = ''
self.update_task_list()
def update_task_list(self):
self.task_list.data = [{'type': 'Task', 'task': task, 'delete': self.delete_item} for task in self.tasks]
def delete_item(self, task):
self.tasks.remove(task)
self.update_task_list()
if __name__ == '__main__':
TodoListApp().run()
- 带有数据持久化的待办事项应用
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.uix.recycleview import RecycleView
from kivy.uix.recycleview.views import RecycleDataViewBehavior
from kivy.uix.recycleboxlayout import RecycleBoxLayout
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.recycleview.layout import LayoutSelectionBehavior
from kivy.properties import BooleanProperty, StringProperty
import json
import os
class SelectableLabel(RecycleDataViewBehavior, Label):
index = None
selected = BooleanProperty(False)
selectable = BooleanProperty(True)
def refresh_view_attrs(self, rv, index, data):
self.index = index
return super(SelectableLabel, self).refresh_view_attrs(rv, index, data)
def on_touch_down(self, touch):
if super(SelectableLabel, self).on_touch_down(touch):
return True
if self.collide_point(*touch.pos) and self.selectable:
return self.parent.select_with_touch(self.index, touch)
def apply_selection(self, rv, index, is_selected):
self.selected = is_selected
if is_selected:
rv.parent.mark_complete(index)
class SelectableRecycleBoxLayout(FocusBehavior, LayoutSelectionBehavior, RecycleBoxLayout):
pass
class TodoListApp(App):
def build(self):
self.main_layout = BoxLayout(orientation='vertical', padding=10, spacing=10)
self.task_input = TextInput(hint_text='Enter a task', size_hint=(1, 0.1), multiline=False)
add_button = Button(text='Add Task', size_hint=(1, 0.1))
add_button.bind(on_press=self.add_task)
self.rv = RecycleView(size_hint=(1, 0.8))
self.rv.layout_manager = SelectableRecycleBoxLayout(orientation='vertical')
self.rv.viewclass = 'SelectableLabel'
self.rv.data = []
self.load_data()
self.main_layout.add_widget(self.task_input)
self.main_layout.add_widget(add_button)
self.main_layout.add_widget(self.rv)
return self.main_layout
def add_task(self, instance):
task_text = self.task_input.text
if task_text:
self.rv.data.append({'text': task_text, 'completed': False})
self.task_input.text = ''
self.save_data()
def mark_complete(self, index):
if 0 <= index < len(self.rv.data):
self.rv.data[index]['completed'] = not self.rv.data[index]['completed']
self.rv.refresh_from_data()
self.save_data()
def load_data(self):
if os.path.exists('todo_list.json'):
with open('todo_list.json', 'r') as file:
self.rv.data = json.load(file)
def save_data(self):
with open('todo_list.json', 'w') as file:
json.dump(self.rv.data, file)
if __name__ == '__main__':
TodoListApp().run()
使用说明:
确保已安装Kivy库。如果未安装,可以通过以下命令安装:
pip install kivy
将上述代码保存为todo_list_app.py文件。
在终端或命令提示符中运行以下命令启动应用:
python todo_list_app.py
在文本框中输入任务内容,点击“添加”按钮将任务添加到列表中。
点击任务项可以标记任务为已完成或未完成。
点击任务旁边的“删除”按钮可删除该任务。
这些示例提供了不同复杂度的待办事项应用,您可以根据需要选择合适的示例进行学习和扩展。