向 kivy 按钮添加 on_release 操作

Posted

技术标签:

【中文标题】向 kivy 按钮添加 on_release 操作【英文标题】:adding an on_release action to a kivy button 【发布时间】:2012-09-23 11:51:30 【问题描述】:

我正在尝试重构the last code sample,以便Button 实际上是它自己的类,带有on_release 操作。但是我的代码失败了。

我不仅想重构它(根据我下面的尝试),还需要将Button 的文本设置为“清除”

从随机导入随机 从 kivy.app 导入应用程序 从 kivy.uix.widget 导入小部件 从 kivy.uix.button 导入按钮 从 kivy.graphics 导入颜色、椭圆、线 MyPaintWidget 类(小部件): def on_touch_down(自我,触摸): 用户数据 = touch.ud 用户数据['color'] = c = (random(), 1, 1) 使用 self.canvas: 颜色(*c,模式='hsv') d = 30 椭圆(pos=(touch.x - d/2, touch.y - d/2), size=(d, d)) userdata['line'] = Line(points=(touch.x, touch.y)) def on_touch_move(self, touch): touch.ud['line'].points += [touch.x, touch.y] 类清除按钮(按钮): def __init__(self,paint_widget): self.paint_widget=paint_widget def on_release(自我,按钮): self.paint_widget.canvas.clear() MyPaintApp 类(应用程序): 定义构建(自我): 父 = 小部件() 画家 = MyPaintWidget() clearbtn = ClearButton(画家) parent.add_widget(画家) parent.add_widget(clearbtn) 返回父母 如果 __name__ == '__main__': MyPaintApp().run()

【问题讨论】:

【参考方案1】:

没有子类化,你可以这样做:

class MyPaintWidget(Widget):
    # ... put your previous methods here
    def clear_canvas(self, *largs):
        self.canvas.clear()

class MyPaintApp(App):
    def build(self):
        root = FloatLayout()
        painter = MyPaintWidget()
        cleanbtn.bind(on_release=self.painter.clear_canvas)
        root.add_widget(painter)
        root.add_widget(clearbtn)
        return root

使用子类化,我更喜欢使用 Kv 语言:

from kivy.lang import Builder

Builder.load_string('''
<ClearButton>:
    text: "Clear"
    on_release: app.painter.canvas.clear()
''')

class ClearButton(Button):
    pass

class MyPaintApp(App):
    def build(self):
        parent = Widget()
        painter = MyPaintWidget()
        clearbtn = ClearButton()
        parent.add_widget(painter)
        parent.add_widget(clearbtn)
        return parent

【讨论】:

以上是关于向 kivy 按钮添加 on_release 操作的主要内容,如果未能解决你的问题,请参考以下文章

动态创建的 kivy 按钮立即运行 on_press 和 on_release

kivy 多次执行“on_release”命令

kivy:单击 1 次按钮触发多个功能

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

(Kivy Python)在 .py 文件中按下按钮时切换屏幕

Kivy 滑块事件 on_release