美文网首页
kivy 基础: widget, texture的使用

kivy 基础: widget, texture的使用

作者: liantz | 来源:发表于2018-02-24 14:33 被阅读0次

    控件Widget是 Kivy 图形界面中的基本元素。控件提供了一个画布Canvas。

    layout = BoxLayout(padding=10)

    button = Button(text='My first button')

    layout.add_widget(button)

    layout 是button的父控件

    button是layout的子控件

    尝试创建控件

    class MyVideoBox(Widget):

        def __init__(self, **kwargs):

            super(MyVideoBox, self).__init__(**kwargs)

            with self.canvas:

                print self.x,self.y,self.width,self.height

    加入到GridLayout,放到第四格的位置

    class MainScreen(GridLayout):

        def __init__(self,**kwargs):

            super(MainScreen,self).__init__(**kwargs)

            self.cols = 2

            self.add_widget(Button(text="+"));

            self.add_widget(Button(text="+"));

            self.add_widget(Button(text="+"));

            #self.add_widget(Button(text="+"));

            self.add_widget(MyVideoBox())

    但是效果是放在左下,而不是layout第四格的位置

    打印是0 0 100 100

    有点奇怪,为什么不是相对位置呢?

    修改一下

    self.add_widget(MyVideoBox(pos=(800,0),size=(800,600)))

    这下对了

    打印是800 0 800 600

    接下来为这个widget添加纹理

    with self.canvas:

        print self.x,self.y,self.width, self.height

        self._texture = Texture.create(size=self.size)

        self._buffer = '\xf0\x20\x80' * 800 * 600

        self._texture.blit_buffer(self._buffer, colorfmt='rgb', bufferfmt='ubyte')

        Rectangle(pos=self.pos,size=self.size,texture=self._texture)

    但是更新内容测试一下,添加按键

    def on_touch_down(self, touch):

        print "touched"

        buf = '\x20\xf0\x80' * 800 * 600

        self._texture.blit_buffer(buf, colorfmt='rgb', bufferfmt='ubyte')

        return super(MyVideoBox, self).on_touch_down(touch)

    打印有了,就是内容没变,怎么办?

    改变如下

        self._texture.blit_buffer(buf, colorfmt='rgb', bufferfmt='ubyte')

    self.canvas.ask_update()

    成功

    问题: remove_widget 不起作用

    def __init__(self, **kwargs):

        super(MyVideoBox, self).__init__(**kwargs)

    with self.canvas:

    self.add_widget(self._button)

    def on_touch_down(self, touch):

    self.remove_widget(self._button)

    解决:

    移到cavas外面

    def __init__(self, **kwargs):

        super(MyVideoBox, self).__init__(**kwargs)

    self.add_widget(self._button)

    with self.canvas:

    def on_touch_down(self, touch):

    self.remove_widget(self._button)

    这样可以了

    相关文章

      网友评论

          本文标题:kivy 基础: widget, texture的使用

          本文链接:https://www.haomeiwen.com/subject/pnbqxftx.html