2017-04-13 4 views
0

Ich bin gerade dabei, eine App mit kivy (1.9.1) zu programmieren, die dank eines GridLayout (2 * 2) in 4 Widgets aufgeteilt ist. Ich suche nach den beiden oberen, die um 180 ° gedreht sind.Drehe 'komplexes' kivy-Widget in ein GridLayout

Ich habe versucht, es mit einem ScatterLayout zu tun, aber die Zellen springt nach unten rechts ... Ich habe versucht, den Scatter in ein Widget einzufügen, aber ich finde nicht, wie Sie die Größe richtig einstellen .

las ich den folgenden Code zu verwenden, um Ressourcen Verbrauch zu optimieren:

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

Es funktioniert auf den ersten Blick, aber die ‚berührende Bereiche‘ haben leider nicht gedreht.

Die einzigen beiden Dinge, die ich gefunden habe, sind die ScatterLayout innen und AnchorLayout setzen oder den vorherigen Code für jedes Kind zu verwenden ...

Ich denke, es eine bessere Lösung ist, aber ich habe nicht in der Lage gewesen, um es so weit zu finden.

haben Sie einen Blick auf meine .kv Datei unten für eine Zusammenstellung von dem, was ich ausprobiert habe:

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' 

Die Py-Datei ist nichts anderes als das:

from kivy.app import App 

class MainApp(App): 
    pass 

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

Danke voraus.

Antwort

0

Ja, Sie können Scatter dafür verwenden.
Versuchen Sie Folgendes:

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