【问题标题】:Rotate 'complex' kivy widget inside a GridLayout在 GridLayout 中旋转“复杂”的 kivy 小部件
【发布时间】:2017-04-13 12:04:44
【问题描述】:

我目前正在使用 kivy (1.9.1) 编写一个应用程序,由于 GridLayout (2 * 2),它分为 4 个小部件。我试图将上面的两个翻转 180°。

我尝试使用 ScatterLayout 来实现,但单元格会跳到右下角... 我尝试将 Scatter 插入到 Widget 中,但我不知道如何正确设置大小。

为了优化资源消耗,我阅读了以下代码:

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

乍一看它可以工作,但遗憾的是“接触区域”没有旋转。

我发现的唯一两件事是将 ScatterLayout 放在里面和 AnchorLayout 或者为每个孩子使用之前的代码......

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

请查看下面的 .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()

提前致谢。

【问题讨论】:

    标签: kivy kivy-language rotatetransform


    【解决方案1】:

    是的,您可以为此使用 scatter。
    试试这个:

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多