2017-07-25 12 views
1

Kann mir jemand sagen, wie Scrollbar in diesem Code zu verwenden? Und zweitens, gibt es eine Möglichkeit, die Beschriftungen und den TextInput so auszurichten, dass der Text innerhalb des TextInputs deutlich sichtbar ist, unabhängig davon, wie viel Input vorhanden ist. Hier bedeutet Ausrichtung: Wenn es 100s (hunderte oder tausende) von TextInputs gibt, sollte der Text innerhalb von TextInput korrekt sichtbar sein. Eigentlich, als ich einige (Abstand = 50) im Code gab, nach einigen 20s Eingabe war der Text nicht richtig sichtbar. Vielen Dank im Voraus.wie scrollbar in kivy python zu verwenden

from kivy.app import App 
from kivy.uix.tabbedpanel import TabbedPanel 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import StringProperty 
from kivy.uix.textinput import TextInput 
from kivy.uix.checkbox import CheckBox 
from kivy.lang import Builder 

ROWS = ['Goc', 'COC', 'EEE', 'abs' , 'kju' , 'iop' , 'nmg', 'gty', 'jkio', 'dbkgcd' , 'udbcbjkb'] 

Builder.load_string(""" 

<Test>: 
    do_default_tab: False 

    TabbedPanelItem: 
     text: 'page1' 

     Table: 
      padding: 50, 50, 50, 50 
      orientation: 'vertical' 

<Row>: 
    spacing: 50 
    size_hint_x: 1 
    txt: txtinpt.text 
    Label: 
     text: root.txt 
    TextInput: 
     id: txtinpt 
     text: root.txt 
     disabled: not CheckBox.active 
    CheckBox: 
     id:CheckBox 
     text: 'CheckBox' 
     active: False 
    Button: 
     text: 'save' 

""") 
class Table(BoxLayout): 
    def __init__(self, **kwargs): 
     super(Table, self).__init__(**kwargs) 
     for row in ROWS: 
      self.add_widget(Row(row)) 



class Row(BoxLayout): 
    txt = StringProperty() 
    def __init__(self, row, **kwargs): 
     super(Row, self).__init__(**kwargs) 
     self.txt = row 



class Test(TabbedPanel): 
    pass 

class MyApp(App): 

    def build(self): 
     test = Test() 
     return test 


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

kivy scrollBar

+0

hinzufügen Scroll-Ansicht trivial ist, aber ich bin nicht sicher, was Sie unter „richten Sie die Etiketten und TextInput-“ bedeuten, könnten Sie ein Beispiel oder Bild setzen Sie zu zeigen, was wollen? – FJSevilla

+0

Liebe @FJSevilla, Es wird Hunderte oder Tausende von Zeilen geben, also sollten wir die Eingabe durch Scrollen sehen. – crazyDelight

Antwort

1

Die Schritte werden folgen:

  1. hinzufügen ScrollView zu TabbedPanelItem und setzen Table in seinem Inneren.
  2. Verhindern Sie, dass das Boxlayout (Table) seine Höhe automatisch an die Höhe seines übergeordneten Widgets unter Verwendung von size_hint_y = None anpasst.
  3. Geben Sie Höhe an.

könnte der Code sein:

from kivy.app import App 
from kivy.uix.tabbedpanel import TabbedPanel 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import StringProperty 
from kivy.uix.textinput import TextInput 
from kivy.uix.checkbox import CheckBox 
from kivy.lang import Builder 

ROWS = ['Goc', 'COC', 'EEE', 'abs' , 'kju' , 'iop' , 'nmg', 'gty', 'jkio', 'dbkgcd' , 'udbcbjkb'] 

Builder.load_string(""" 

<Test>: 
    do_default_tab: False 

    TabbedPanelItem: 
     text: 'page1' 

     ScrollView: 
      Table: 
       orientation: "vertical" 
       size_hint_y: None 
       height: self.minimum_height 
       padding: 50, 50, 50, 50 


<Row>: 
    spacing: 50 
    size_hint_y: None 
    size_hint_x: 1 
    height: 100 
    txt: txtinpt.text 
    Label: 
     text: root.txt 

    TextInput: 
     id: txtinpt 
     text: root.txt 
     disabled: not CheckBox.active 
    CheckBox: 
     id:CheckBox 
     text: 'CheckBox' 
     active: False 
    Button: 
     text: 'save' 

""") 
class Table(BoxLayout): 
    def __init__(self, **kwargs): 
     super(Table, self).__init__(**kwargs) 
     for row in ROWS: 
      self.add_widget(Row(row)) 



class Row(BoxLayout): 
    txt = StringProperty() 
    def __init__(self, row, **kwargs): 
     super(Row, self).__init__(**kwargs) 
     self.txt = row 


class Test(TabbedPanel): 
    pass 

class MyApp(App): 

    def build(self): 
     test = Test() 
     return test 


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

Hinweis: Die Änderungen nur kv Datei.

Ausgang: enter image description here

+2

Für Hunderte oder Tausende von Zeilen, möchten Sie RecycleView verwenden, nicht alle Widgets erstellen, oder Ihre Software wird sicherlich unakzeptabel langsam sein. – Tshirtman