2017-01-26 1 views
0

Ich versuche, ein Programm zum Anzeigen einer Tabelle mit Kivy zu machen. Hier habe ich die Tabellennamen als Schaltflächen, und die Werte sind durch Etiketten definiert. Mit einer Funktion, ich setze Etiketten nach der Anzahl der Zeilen und Spalten, dann möchte ich sie extern mit einer anderen Funktion bevölkern, es wirft einen Index_Error. Heres mein ganzer Code.Nicht in der Lage, Etikettentext in Kivy Python dynamisch zu ändern

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.textinput import TextInput 
from kivy.lang import Builder 
from kivy.uix.scrollview import ScrollView 
from kivy.core.window import Window 
from kivy.uix.button import Button 
from kivy.app import runTouchApp 

    class TableView(GridLayout): 
    Col_Names = ["Date","Vendor","Country","MOU","ASR","AOU"] 
    Label_List =[] 

    MyListOfElements = [['1sample1','1sample2','1sample3','1sample4','1sample5','1sample6'], 
        ['2sample1','2sample2','2sample3','2sample4','2sample5','2sample6'], 
        ['3sample1','3sample2','3sample3','3sample4','3sample5','3sample6'], 
        ['4sample1','4sample2','4sample3','4sample4','4sample5','4sample6']] 

    def AddLables(self,columns, rows): 
     self.LabelRow = [] 
     for i in range(columns): 
      for j in range(rows): 
       lbl = Label(size_hint_y =None, size_hint_x = None , width =30) 
       self.layout.add_widget(lbl) 
       self.LabelRow.append(lbl) 
     self.Label_List.append(self.LabelRow) 

    def AddLabel_Text(self,columns, rows): 
     for i in range(columns): 
      for j in range(rows): 
       self.Label_List[i][j].text = self.MyListOfElements[i][j] 


    def __init__(self,**kwargs): 
     self.layout = GridLayout(cols = len(self.Col_Names), padding =5) 
     self.layout.bind(minimum_height=self.layout.setter('height')) 
     for i in range(len(self.Col_Names)): 
      btn = Button(text=self.Col_Names[i], size_hint_y=None, height=30) 
      self.layout.add_widget(btn) 
     self.AddLables(4,6) 
     self.AddLabel_Text(4,6) 

    if __name__ == '__main__': 
    Table = TableView() 
    runTouchApp(Table.layout) 

Ich möchte eine alternative Lösung, um den Labelname nur durch den Aufruf einer Funktion zu aktualisieren. Ich weiß, dass Labels in Python nicht direkt indiziert werden können, aber gibt es alternative Lösungen?

Antwort

1

Ich denke, die folgende Zeile eine andere indententation Ebene haben sollte

self.Label_List.append(self.LabelRow) 

Versuch:

for i in range(columns): 
     for j in range(rows): 
      lbl = Label(size_hint_y =None, size_hint_x = None , width =30) 
      self.layout.add_widget(lbl) 
      self.LabelRow.append(lbl) 
      #lbl.text = self.MyListOfElements[i][j] 
    #--->Now it's inside the first loop! 
     self.Label_List.append(self.LabelRow) 

Jetzt werden Sie genug Reihen haben, so dass AddLabel_Text nicht

scheitern
+0

Es ist die AddLabel_Text-Funktion, die das Problem verursacht. Diese andere Aussage wird absichtlich auskommentiert. – FaultyProgrammer3107

+0

Es verursacht das Problem, weil Sie nicht richtig gebaut, wie ich in meiner Antwort –

+0

Ok, jetzt Theres ein anderes Problem. Es zeigt nur eine Zeile und nicht alle an und zeigt nicht das letzte Element in jeder Zeile an. – FaultyProgrammer3107

Verwandte Themen