python写android的App(kivy框架)的实践(3)

本文探讨了创建一个简单画板应用时的关键问题,包括数据处理、可视化呈现和用户交互。通过组件化方法实现画布和清除按钮,涉及Canvas的图形绑定、颜色模式选择、触摸事件处理以及Button的回调机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前文的乒乓球弄完了,但还是缺少了很多东西,不知道该怎么做一个想要的App,所以,A Simple Paint App这一篇继续讲起了概念。

文中问题:

‎在创建应用程序时,您必须问自己三个重要问题:‎
‎我的应用程序会处理哪些数据?‎
‎如何直观地表示这些数据?‎
‎用户如何与这些数据交互?‎

基本概念:
组件化,什么功能的实现都是一个一个组件组合起来的效果。

通篇讲的是简单的画板以及清除按钮的实现。

知识点:

  1. 通过with self.canvas来实现图形的绑定和渲染,后续对图像的更改也会影响canvas中的效果,如同例子中的Line
  2. 通过touch.udkivy.input.providers.mouse.MouseMotionEvent.ud来在不同的事件监听中实现共享实例或数据
  3. 关于颜色,暗色调会和黑色背景混淆导致看不清,可以通过设置Color使用hsv模式而不是RGB来使用亮色调的颜色
  4. Button.bind用于绑定回调函数,也是练习中,清空画板按钮的绑定方式
  5. add_widget用于给组件添加其它组件作为父子组件存在
  6. 如果需要其它更详细的调整,就去看API的文档

教程代码如下:
paint.py

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

from kivy.app import App
from random import random
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.graphics import Color, Ellipse, Line


class MyPaintWidget(Widget):

    def on_touch_down(self, touch):
        # color = (random(), random(), random())
        color = (random(), 1., 1.)
        with self.canvas:
            # Color(*color)
            Color(*color, mode="hsv")   # 为了避免色调太暗和黑色背景混淆,可以通过设置使用hsv模式,来使用亮色调的颜色
            d = 30.
            Ellipse(pos=(touch.x -d / 2, touch.y -d / 2), size=(d, d))
            touch.ud["line"] = Line(points=(touch.x, touch.y))  # ud是一个可以用于存放自定义数据的一个字典,利于共享和维护,此处在创建完Line之后,可以直接在on_touch_move中访问Line
    
    def on_touch_move(self, touch):
        touch.ud["line"].points += [touch.x, touch.y]


class MyPaintApp(App):
    def build(self):
        parent = Widget()
        self.painter = MyPaintWidget()
        clearbtn = Button(text="Clear")
        clearbtn.bind(on_release=self.clear_canvas)
        parent.add_widget(self.painter)
        parent.add_widget(clearbtn)
        return parent
    
    def clear_canvas(self, obj):
        self.painter.canvas.clear()


if __name__ == '__main__':
    MyPaintApp().run()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值