繁体   English   中英

在 GridLayout 内显示 Kivy canvas

[英]Display Kivy canvas inside GridLayout

我试图在 GridLayout 中引用 Canvas ,在进一步开发之前只绘制简单的矩形。 代码:

主要.py:

import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.graphics.vertex_instructions import Rectangle
from kivy.graphics.context_instructions import Color

class Grafika(Widget):
    def __init__(self, **kwargs):
        super(Grafika,self).__init__(**kwargs)
        with self.canvas:
            Color(1, 0, 0, 1)
            Rectangle(pos=self.pos,size=self.size)

kv=Builder.load_file("my.kv")

class MyMainApp(App):
    def build(self):
        return kv

if __name__ == "__main__":
    MyMainApp().run()

我的.py

<TextInput>:
    font_size:20
    color: 0.3, 0.6,0.7,1
    size_hint: (0.3,0.5)
<Button>:
    font_size:20
    color: 0.3, 0.6,0.7,1
    size_hint: (0.3,0.3)


Grafika:
    GridLayout:
        cols:2
        GridLayout:
            size_hint: (0.3,0.2)
            cols:1
            GridLayout:
                cols:2
                Label:
                    text:"no"
                TextInput:
                    text: "50"
                Label:
                    text:"rbr"
                TextInput:
                    text: "100"
            Button:
                text:"calc"
        canvas:
            Color:
                rbg:1, 1, 1, 1
            Rectangle:
                pos:self.pos
                size:self.size

运行后我得到错误:

...
     27:            Button:
     28:                text:"calc"
>>   29:        canvas:
     30:            Color:
     31:                rbg:1, 1, 1, 1
...
Canvas instructions added in kv must be declared before child widgets.

我是 kivy 的新手,因此不胜感激。

解决此问题后,我打算运行自定义 python func,在按钮 calc 下运行,并在 canvas 上返回计算结果。 Func 结果是二维线点,因此在 canvas 上绘制结果是这里的目标。

改变:

Grafika:
    GridLayout:
        cols:2
        GridLayout:
            size_hint: (0.3,0.2)
            cols:1
            GridLayout:
                cols:2
                Label:
                    text:"no"
                TextInput:
                    text: "50"
                Label:
                    text:"rbr"
                TextInput:
                    text: "100"
            Button:
                text:"calc"
        canvas:
            Color:
                rbg:1, 1, 1, 1
            Rectangle:
                pos:self.pos
                size:self.size

至:

Grafika:
    GridLayout:
        cols:2
        canvas:
            Color:
                rbg:1, 1, 1, 1
            Rectangle:
                pos:self.pos
                size:self.size
        GridLayout:
            size_hint: (0.3,0.2)
            cols:1
            GridLayout:
                cols:2
                Label:
                    text:"no"
                TextInput:
                    text: "50"
                Label:
                    text:"rbr"
                TextInput:
                    text: "100"
            Button:
                text:"calc"

canvas:指令放在孩子面前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM