在 GridLayout 中旋转 'complex' kivy 小部件

Rotate 'complex' kivy widget inside a GridLayout

我目前正在用 kivy (1.9.1) 编写一个应用程序,由于 GridLayout (2 * 2),它被分成 4 个小部件。我搜索把上面两个翻转180°

我尝试使用 ScatterLayout 来实现,但单元格跳到右下角... 我试过在 Widget 中插入 Scatter,但我没有找到正确设置大小的方法。

我阅读使用以下代码来优化资源消耗:

        canvas.before:
            PushMatrix
            Rotate:
                angle: 180
                origin: self.center
        canvas.after:
            PopMatrix

乍一看可以,但不幸的是 'touching areas' 没有旋转。

我发现的唯一两件事是将 ScatterLayout 和 AnchorLayout 放在里面,或者对每个 child...

使用以前的代码

我认为有更好的解决方案,但到目前为止我还没有找到。

请查看下面我的 .kv 文件,了解我试验过的内容的汇编:

GridLayout:
    cols: 2
    rows: 2

    AnchorLayout:
        ScatterLayout:
            center: self.parent.center
            do_rotation: False
            do_translation: False
            do_scale: False
            rotation: 180

            GridLayout:
                cols: 2
                Button:
                    text: '1.1'
                Button
                    text: '1.2'

     Button:
         text: '2'

     GridLayout:
         size: self.parent.size
         center: self.parent.center
         cols: 3

         Button:
             canvas.before:
                 PushMatrix
                 Rotate:
                     angle: 180
                     origin: self.center
            canvas.after:
                PopMatrix
            text: '3.1'

         Button:
             canvas.before:
                 PushMatrix
                 Rotate:
                     angle: 180
                     origin: self.center
             canvas.after:
                  PopMatrix
             text: '3.2'

        GridLayout:
            size: self.parent.size
            center: self.parent.center
            rows: 2

            canvas.before:
                PushMatrix
                Rotate:
                    angle: 180
                    origin: self.center
            canvas.after:
                PopMatrix

            Button:
                text: '3.3.1'
            Button:
                text: '3.3.2'

    Button:
        text: '4'

.py文件无非就是:

from kivy.app import App

class MainApp(App):
    pass

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

提前致谢。

是的,您可以为此使用散点图。
试试这个:

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder


KV = '''

MyGrid:
    rows: 2
    cols: 2
    BoxLayout:
        id: w1
        Scatter:
            size: w1.size
            rotation: 180
            do_rotation: False
            Button:
                size: w1.size
                text: "Label1"

    BoxLayout:
        id: w2
        Scatter:
            size: w2.size
            rotation: 180
            do_rotation: False
            Button:
                size: w2.size
                text: "Label2"

    Button:
        text: "Label3"
    Button:
        text: "Label4"

'''



class MyGrid(GridLayout):
    pass


class MyApp(App):

    def build(self):
        return Builder.load_string(KV)


MyApp().run()