2017-07-21 4 views
0

Ich habe ein Stück Code. (1) Der TextInput-Wert sollte angezeigt werden, aber zuerst sollte er nicht bearbeitet werden können, nach dem Klicken auf die entsprechende CheckBox kann der TextInput editiert werden.
(2) Mit der Iteration sollten das Label und der TextInput den Wert erhalten. Der Wert bei Label und TextInput sollte nicht fest codiert sein (obwohl es in meinem Code vorhanden ist, @FJSevilla hat mir dabei geholfen).
(3) Die Werte von Label und TextInput werden jedoch in einer Variablen im JSON-Format gespeichert. etwas wie das (Sie können wie Schlüssel, Wertpaar in Karte betrachten) [Variable = '{"a": "Goc", "b": "Coc", "c": "Dow"}]] (Sie können siehe Diagramm für mehr Abstand). Ich schätze die Hilfe.wie Aktivieren/Deaktivieren der Bearbeitung in TextInput mit Kivy in Python

from kivy.app import App 
from kivy.uix.tabbedpanel import TabbedPanel 
from kivy.lang import Builder 

Builder.load_string(""" 

<Test>: 
    do_default_tab: False 

    TabbedPanelItem: 
     text: 'page1' 

     BoxLayout: 
      padding: 50, 50, 50, 50 
      orientation: 'horizontal' 

      BoxLayout: 
       spacing: 50 
       orientation: 'vertical' 
       size_hint_x: 1 
       Label: 
        text: 'a' 
       Label: 
        text: 'b' 
       Label: 
        text: 'c' 

      BoxLayout: 
       spacing: 50 
       orientation: 'vertical' 
       TextInput: 
        text: 'Goc' 
       TextInput: 
        text: 'Coc' 
       TextInput: 
        text: 'Dow' 

      BoxLayout: 
       spacing: 50 
       orientation: 'vertical' 
       size_hint_x: 0.40 
       CheckBox: 
        text: 'CheckBox' 
       CheckBox: 
        text: 'CheckBox' 
       CheckBox: 
        text: 'CheckBox' 

      BoxLayout: 
       spacing: 50 
       orientation: 'vertical' 
       size_hint_x: 0.60 
       Button: 
        text: 'save' 
       Button: 
        text: 'save' 
       Button: 
        text: 'save' 


""") 

class Test(TabbedPanel): 
    pass 

class MyApp(App): 

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


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

kivy userInterface

Antwort

2

Zunächst einmal, ich danke Ihnen eine App für die Bereitstellung, die mit war leicht zu arbeiten.

Ich habe versucht, zu implementieren, was Sie außer dem JSON suchten. Ich verwende eine einfache Liste, es sollte einfach sein, meinen Code für ein JSON zu erweitern.

Anstatt Spalten zu verwenden, verwende ich Zeilen, die es leichter macht, die Eigenschaften des Label-Textinput und Checkbox miteinander zu verknüpfen.

enter image description here

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'] 

Builder.load_string(""" 

<Test>: 
    do_default_tab: False 

    TabbedPanelItem: 
     text: 'page1' 

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

<Row>: 
    spacing: 50 
    #orientation: 'vertical' 
    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() 
+2

Auch können Sie dies in der kv ohne die Funktion in CheckBox tun: on_active. So: TextInput: deaktiviert: nicht CheckBox.active – favcau

+0

@favcau wusste das nicht, danke. Ich habe meine Antwort entsprechend bearbeitet. – PalimPalim

+0

liebe @PalimPalim danke für deine Zeit. Tatsächlich sind einige Probleme immer noch da. (1) Label und TextInput werden beide bearbeitet, müssen aber nur TextInput für ein entsprechendes Label bearbeiten. (2) Nach dem Bearbeiten, wenn ich erneut auf einen CheckButton klicke, sollte der entsprechende TextInput wieder Non_Editable sein. UND (3) die Änderungen sollten im Terminal angezeigt werden (sowohl das geänderte Label als auch TextInput). – crazyDelight