如何为 python kivy 绘画应用程序添加清除按钮

Posted

技术标签:

【中文标题】如何为 python kivy 绘画应用程序添加清除按钮【英文标题】:How to add a clear button for a python kivy painting app 【发布时间】:2017-10-21 18:04:53 【问题描述】:

我正在使用 python 和 kivy 构建一个基本的绘画应用程序,用于学习应用程序开发。我试图通过修改 .kv 文件上的代码来弄清楚如何在屏幕上绘图后清除画布。

在 .kv 文件中,我想我需要修改 #on_release:root.canvas.clear() 部分代码,目前它删除了整个画布和按钮。我试图弄清楚如何让它只清除屏幕,允许再次在屏幕上重绘,并且不删除按钮。

这里有一张图片作为上下文 Painter App

按下清除按钮后会发生什么 Blank Screen

from random import random
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.widget import Widget
from kivy.graphics import Line, Color, Ellipse

class Painter(Widget):
    def on_touch_down(self, touch):
    color = (random(), 1.,1.) #reduce number of possible colors
    with self.canvas:
        Color(*color, mode='hsv') #sets the colors to be equally bright
        d = 30.
        Ellipse(pos=(touch.x - d / 2,touch.y - d / 2), size=(d,d))
        touch.ud["line"] = Line(points=(touch.x, touch.y))


def on_touch_move(self, touch):
    touch.ud["line"].points += [touch.x, touch.y]

class MainScreen(Screen):
    pass

class AnotherScreen(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_file("main3.kv") #load the kivy file

class SimpleKivy7(App):
    def build(self):
        return presentation

if __name__== "__main__":
    SimpleKivy7().run()
以下是kivy文件
#: import FadeTransition kivy.uix.screenmanager.FadeTransition

ScreenManagement:
    transition: FadeTransition()
    MainScreen:
    AnotherScreen:

<MainScreen>:
    name: "main"
    Button:
        on_release: app.root.current = "other"
        text: "Next Screen"
        font_size: 50

<AnotherScreen>:
    name: "other"

FloatLayout:
    Painter
    Button:
        color:0,1,0,1
        font_size: 25
        size_hint: 0.3, 0.2
        text: "Back Home"
        on_release: app.root.current = "main"
        pos_hint: "right":1, "top":1

    Button:
        color:0,1,0,1
        font_size: 25
        size_hint: 0.3, 0.2
        text: "Clear"
        #on_release:root.canvas.clear() #root.canvas.clear() clears everything. 
        pos_hint: "left":1, "top":1

【问题讨论】:

【参考方案1】:

我假设您提供的代码只是代码库的一部分。我遇到了一些我想清除的错误:Painterdef on_touch_down 之后的第 10 行没有缩进,我将第 10-17 行缩进一次。在.kv 文件中有两个小部件kivy 被视为根小部件(只能有一个)。我在第 3 行的屏幕管理器 ScreenManagement 周围添加了 &lt;&gt;。我也很遗憾地说,在我的情况下,应用程序只绘制圆圈​​,而不是它们后面的线条。

问题出在.kv 文件中的第 34 行:on_release: root.canvas.clear()root 指的是FloatLayout。因此,您正在清除 FloatLayout 上的所有内容,包括按钮。您需要清除的是Painter 小部件的画布。将 id 添加到您的 Painter 并清除其画布:

FloatLayout:
    Painter:
        id: painter # an id for referring to this widget
    Button:
        color:0,1,0,1
        font_size: 25
        size_hint: 0.3, 0.2
        text: "Back Home"
        on_release: app.root.current = "main"
        pos_hint: "right":1, "top":1

    Button:
        color:0,1,0,1
        font_size: 25
        size_hint: 0.3, 0.2
        text: "Clear"
        on_release:  painter.canvas.clear() # clear the Painter's canvas
        pos_hint: "left":1, "top":1

【讨论】:

非常感谢!我按照您的建议添加了 id:painter,并为清除按钮添加了 on_release:painter.canvas.clear() 该按钮现在仅清除画布!

以上是关于如何为 python kivy 绘画应用程序添加清除按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何为以下python代码制作单独的kivy文件

如何为我的 python 应用程序设置试用期?

如何为我的python应用程序设置试用期?

有没有一种简单的方法可以为 Kivy 按钮添加边框

在 android for windows 上运行 kivy

如何为 TapGesture 识别器设置框架