首页 > 解决方案 > Kivy:绘制到小部件

问题描述

我收集了 kivy 的经验,但我在使用小部件中心时遇到了问题。我的问题显示下一个脚本:

from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.app import App
from functools import partial
from kivy.graphics import Color, Ellipse

class CanvasApp(App):

    def draw(self,wid, color):
         with wid.canvas:
            Color(color[0], color[1], color[2])
            Ellipse(size= (100, 100), pos=(wid.center_x, wid.center_y))
         return

    def painter(self, wid, *largs):
        self.draw(wid, (0,  1, 0))
        return

    def build(self):
        wid = Widget()

        btn_painter = Button(text='Painter',
                            on_press=partial(self.painter, wid))

        ctrl =  BoxLayout(size_hint=(1, None), height=50)
        ctrl.add_widget(btn_painter)
        root = BoxLayout(orientation='vertical')
        root.add_widget(wid)
        root.add_widget(ctrl)

        self.draw(wid, (1, 0, 0))
        return root

if __name__ == '__main__':
    CanvasApp().run()

我想在不使用按钮画家的情况下在小部件中心(黑色矩形)绘制圆圈。我无法获得中心的实际中心坐标。如果不使用按钮,则只有默认中心坐标可用。OK流程是怎样的?谢谢你的回答。

标签: kivy

解决方案


问题是方法wid内部尚未设置大小和位置build()。所以你需要延迟draw()一点调用。尝试将调用替换为draw()

    Clock.schedule_once(partial(self.draw, wid, (1,0,0)))

您还需要draw()稍微更改方法以处理dt添加的参数:

def draw(self,wid, color, *args):

推荐阅读