2016-04-28 13 views
0

Ich habe ein Interface-Layout (cleanscreen.kv):keine Scroll-Liste von Schaltflächen in Scroll

#:kivy 1.9.1 

<CleanScreen> 
    FloatLayout: 
     canvas: 
      Color: 
       rgb: 
        0.1, 0.3, 0.6 
      Rectangle: 
       pos: self.pos 
       size: self.size 

    ScrollView: 
     GridLayout: 
      cols: 1 
      size_hint_y: None 
      spacing: 10 
      padding: 10 
      height: self.minimum_height 
      canvas: 
       Color: 
        rgb: 1, 0, 1 
       Rectangle: 
        pos: self.pos 
        size: self.size 
      FloatLayout: 
       id: box_share 
       size_hint_y: None 

und Python-Datei (cleanscreen.py):

#! /usr/bin/python2.7 
# -*- coding: utf-8 -*- 

try: 
    from kivy.app import App 
    from kivy.uix.boxlayout import BoxLayout 
    from kivy.uix.image import Image 
    from kivy.uix.button import Button 
    from kivy.uix.label import Label 
    from kivy.lang import Builder 
except Exception as text_error: 
    raise text_error 


class CleanScreen(BoxLayout): 
    Builder.load_file("cleanscreen.kv") 

    def __init__(self, **kvargs): 
     super(CleanScreen, self).__init__(**kvargs) 
     self.orientation = "vertical" 
     self.create_button(self.ids.box_share) 

    def create_button(self, box_share): 
     top_logo_share = 1.01 
     top_button_share = 1.1 
     top_label_share = 1.4 

     for i in range(50): 
      top_logo_share -= .4 
      top_button_share -= .4 
      top_label_share -= .4 

      logo_share = \ 
       Image(source="data/logo/kivy-icon-48.png", 
         pos_hint={"center_x": .05, "top": top_logo_share}, 
         size_hint_y=None, height=25) 
      button_share = \ 
       Button(pos_hint={"x": 0, "top": top_button_share}, 
         size_hint_y=None, height=40) 
      label_share = \ 
       Label(text=str(i), pos_hint={"x": 0, "top": top_label_share}, 
         size_hint_y=None) 

      box_share.add_widget(button_share) 
      box_share.add_widget(logo_share) 
      box_share.add_widget(label_share) 

if __name__ in ["__main__", "__android__"]: 
    import kivy 
    kivy.require("1.9.1") 


    class Test(App): 
     def build(self): 
      return CleanScreen() 


    Test().run() 

Ich wollte dieses Ergebnis erhalten :

I wanted to get this result

Führen Sie dieses Skript zeigt das folgende Ergebnis h ere:

But getting here is

Und die Liste nicht Tasten scrollen. Wo habe ich einen Fehler gemacht?

Antwort

0

Ihre FloatLayout in kv-Datei hat keine Höhe festgelegt, daher erhält entweder die Standard-eins. Das ist eigentlich egal, weil Sie Widgets einfach in ein Widget schieben, das nichts Gutes tut, wenn es innerhalb GridLayout ist, das in ScrollView ist. Nein, es gibt einen besseren und vernünftigeren Weg (zumindest wie ich es sehe). :)

wegzuwerfen FloatLayout von kv-Datei, gibt es keine Notwendigkeit, dass und GridLayout verwenden, denn das ist das Widget, das größer werden soll (und beeinflusst ScrollView), wenn Sie Widget drücken, um in, nicht die FloatLayout und Gridlayout zwingen zu künstlich sich andersherum größer machen.

ScrollView: 
    GridLayout: 
     id: box_share 
     cols: 1 
     size_hint_y: None 
     spacing: 10 
     padding: 10 
     height: self.minimum_height 
     canvas: 
      Color: 
       rgb: 1, 0, 1 
      Rectangle: 
       pos: self.pos 
       size: self.size 

und in der Python-Datei Verwendung create_button() ein FloatLayout erstellen, die Sie mit Ihrem Widgets füllen. Ich bin irgendwie verwirrt von dieser Positionierung, also werde ich das nicht für dich reparieren, Entschuldigung. Vergessen Sie nicht, die Höhe FloatLayout einzustellen.

def create_button(self, box_share): 
    top_logo_share = 1.01 
    top_button_share = 1.1 
    top_label_share = 1.4 

    for i in range(50): 
     top_logo_share -= .4 
     top_button_share -= .4 
     top_label_share -= .4 

     logo_share = \ 
      Image(source="data/logo/kivy-icon-48.png", 
        pos_hint={"center_x": .05, "top": top_logo_share}, 
        size_hint_y=None, height=25) 
     button_share = \ 
      Button(pos_hint={"x": 0, "top": top_button_share}, 
        size_hint_y=None, height=40) 
     label_share = \ 
      Label(text=str(i), pos_hint={"x": 0, "top": top_label_share}, 
        size_hint_y=None) 
     fl = FloatLayout(size_hint_y=None, height=25) 
     fl.add_widget(button_share) 
     fl.add_widget(logo_share) 
     fl.add_widget(label_share) 
     box_share.add_widget(fl) 
Verwandte Themen