第一阶段:环境搭建与第一个应用
目标:
-
安装 Kivy 环境。
-
创建并运行第一个 Kivy 应用。
步骤:
-
安装 Kivy: 使用
pip
安装 Kivy:bash复制
pip install kivy
-
创建第一个应用: 编写一个简单的 Kivy 应用,显示一个按钮。
Python复制
from kivy.app import App from kivy.uix.button import Button class SimpleApp(App): def build(self): return Button(text='Hello, Kivy!') if __name__ == '__main__': SimpleApp().run()
运行代码后,你会看到一个窗口,显示一个按钮,按钮上写着 "Hello, Kivy!" 。
第二阶段:学习基本组件与布局
目标:
-
掌握 Kivy 的基本组件(如
Label
、Button
、TextInput
)。 -
学习常用的布局方式(如
BoxLayout
、GridLayout
)。
示例代码:
-
多个组件的简单应用:
Python复制
from kivy.app import App from kivy.uix.label import Label from kivy.uix.textinput import TextInput from kivy.uix.button import Button from kivy.uix.boxlayout import BoxLayout class MultipleWidgetsApp(App): def build(self): layout = BoxLayout(orientation='vertical', padding=20, spacing=10) self.label = Label(text='Enter your name:') self.input = TextInput(hint_text='Type here') self.button = Button(text='Submit') self.button.bind(on_press=self.on_button_press) layout.add_widget(self.label) layout.add_widget(self.input) layout.add_widget(self.button) return layout def on_button_press(self, instance): name = self.input.text self.label.text = f'Hello, {name}!' if __name__ == '__main__': MultipleWidgetsApp().run()
运行后,输入名字并点击按钮,标签会显示 "Hello, [你的名字]!" 。
-
BMI 计算器:
Python复制
from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label from kivy.uix.textinput import TextInput from kivy.uix.button import Button from kivy.metrics import dp class BMIApp(App): def build(self): self.title = 'BMI Calculator' layout = BoxLayout(orientation='vertical', padding=dp(20), spacing=dp(20)) title_label = Label(text='BMI Calculator', font_size=24, size_hint=(1, 0.1)) weight_label = Label(text='Weight (kg):', size_hint=(0.4, None), height=dp(40), font_size=18) self.weight_input = TextInput(hint_text='Enter weight', multiline=False, size_hint=(0.6, None), height=dp(40), font_size=18) height_label = Label(text='Height (cm):', size_hint=(0.4, None), height=dp(40), font_size=18) self.height_input = TextInput(hint_text='Enter height', multiline=False, size_hint=(0.6, None), height=dp(40), font_size=18) calculate_button = Button(text='Calculate BMI', size_hint=(1, 0.15), font_size=20) calculate_button.bind(on_press=self.calculate_bmi) self.result_label = Label(text='', font_size=24, size_hint=(1, 0.2)) layout.add_widget(title_label) layout.add_widget(weight_label) layout.add_widget(self.weight_input) layout.add_widget(height_label) layout.add_widget(self.height_input) layout.add_widget(calculate_button) layout.add_widget(self.result_label) return layout def calculate_bmi(self, instance): try: weight = float(self.weight_input.text) height = float(self.height_input.text) / 100 bmi = weight / (height * height) if bmi < 18.5: category = 'Underweight' elif bmi < 24.9: category = 'Normal weight' elif bmi < 29.9: category = 'Overweight' else: category = 'Obesity' self.result_label.text = f'Your BMI: {bmi:.2f}\nCategory: {category}' except ValueError: self.result_label.text = 'Invalid input. Please enter valid numbers.' if __name__ == '__main__': BMIApp().run()
运行后,输入体重和身高,点击按钮即可计算 BMI 并显示结果 。
第三阶段:事件处理与交互
目标:
-
学习如何处理用户交互事件(如按钮点击、文本输入)。
-
掌握 Kivy 的事件绑定机制。
示例代码:
Python复制
from kivy.app import App
from kivy.uix.button import Button
class EventApp(App):
def build(self):
button = Button(text='Click Me')
button.bind(on_press=self.on_button_press)
return button
def on_button_press(self, instance):
print("Button was pressed!")
if __name__ == '__main__':
EventApp().run()
运行后,点击按钮会在控制台打印 "Button was pressed!" 。
第四阶段:使用 Kivy 语言(.kv 文件)
目标:
-
学习 Kivy 的
.kv
文件,用于分离界面和逻辑。 -
掌握如何使用
.kv
文件定义布局和样式。
示例代码:
-
创建
main.py
:Python复制
from kivy.app import App from kivy.uix.boxlayout import BoxLayout class MyApp(App): def build(self): return BoxLayout() if __name__ == '__main__': MyApp().run()
-
创建
main.kv
:kv复制
BoxLayout: orientation: 'vertical' padding: 20 spacing: 10 Label: text: 'Hello, Kivy!' Button: text: 'Click Me'
运行后,你会看到一个窗口,包含一个标签和一个按钮 。
第五阶段:实战项目
目标:
-
综合运用所学知识,开发一个小型项目。
-
掌握如何组织代码和调试。
示例项目:
-
简单计算器:
Python复制
from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label from kivy.uix.button import Button class CalculatorApp(App): def build(self): layout = BoxLayout(orientation='vertical') self.label = Label(text='') layout.add_widget(self.label) buttons = [ ('7', '8', '9', '/'), ('4', '5', '6', '*'), ('1', '2', '3', '-'), ('0', '.', '=', '+'), ] for row in buttons: for btn_text in row: button = Button(text=btn_text, size_hint=(0.2, 0.1)) button.bind(on_press=self.on_button_press) layout.add_widget(button) return layout def on_button_press(self, instance): if instance.text == '=': try: result = str(eval(self.label.text)) self.label.text = result except Exception as e: self.label.text = 'Error' else: self.label.text += instance.text if __name__ == '__main__': CalculatorApp().run()
运行后,你可以使用按钮进行简单的数学运算 。
第六阶段:进阶与扩展
目标:
-
学习如何集成外部库(如 SQLite、OpenCV)。
-
掌握 Kivy 的高级功能(如多窗口、音视频支持)。
示例代码:
-
集成 SQLite:
Python复制
from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label from kivy.uix.textinput import TextInput import sqlite3 class DatabaseApp(App): def build(self): layout = BoxLayout(orientation='vertical', padding=20, spacing=10) self.label = Label(text='Enter name:') self.input = TextInput(hint_text='Type here') self.button = Button(text='Save') self.button.bind(on_press=self.save_to_db) layout.add_widget(self.label) layout.add_widget(self.input) layout.add_widget(self.button) return layout def save_to_db(self, instance): name = self.input.text conn = sqlite3.connect('test.db') c = conn.cursor() c.execute("INSERT INTO users (name) VALUES (?)", (name,)) conn.commit() conn.close() self.label.text = 'Data saved!' if __name__ == '__main__': DatabaseApp().run()
运行后,输入名字并点击按钮,数据会被保存到 SQLite 数据库中 。