Kivy在小部件上画画

时间:2013-09-07 21:21:54

标签: python widget kivy

我是Kivy的新手,在完成教程后,我的下一步是在一个应用程序中添加两个教程的小部件。 CombWidget类将是我的Widget,Paint和PingPong小部件将被添加到其中。对于中间步骤,添加了BoxLayout并且

  1. 一些按钮
  2. MyPaintWidget
  3. 在BoxLayout中

    要仅将绘图限制为MyPaintWidget,添加了if语句

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

    该线仅绘制在按钮上方的一个小点上。除了Buttons之外,点到处都是画画。按钮也不再对点击做出反应。

    代码:

    from random import random
    from kivy.app import App
    from kivy.graphics import Color, Ellipse, Line
    from kivy.uix.button import Button
    from kivy.uix.widget import Widget
    
    class CombWidget(Widget):
        pass
    class MyPaintWidget(Widget):
    
    def on_touch_down(self, touch):
        color = (random(), 1, 1)
        with self.canvas:
            Color(*color, mode='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))
    
    def on_touch_move(self, touch):
        if self.collide_point(touch.x, touch.y):
            touch.ud['line'].points += [touch.x, touch.y]
    
    class MyPaintApp(App):       
        def build(self):
            return CombWidget()
    
    if __name__ == '__main__':
        MyPaintApp().run()
    

    和布局文件:

    #:kivy 1.7.0
    
    
    <CombWidget>:
        BoxLayout:
            orientation: 'vertical'
            padding: 20
            spacing: 50
    
            MyPaintWidget:
                size: 100000, 100000
                size_hint: 100000, 100000
    
            Button:
                text: "Hallo"
            Button:
                text: "Hallo 1"
            Button:
                text: "Hallo 2"
    

    为了增加MyPaintWidget的大小,我在kv文件中使用了size:和size_hint:参数,但没有成功。

    任何人都可以帮助增加MyPaintWidget的大小,以便该区域的行为就像教程中的MyPaintyApp一样。另外,为什么我点击它们时会显示我的按钮。

    此致

1 个答案:

答案 0 :(得分:1)

解决方案是修改布局文件

<CombWidget>:
BoxLayout:
    orientation: 'vertical'
    size: root.size

也可以通过向on_touch_down和on_touch_move方法添加'return True',一切正常。