2017-01-26 14 views
0

Я пытаюсь создать программу для отображения таблицы с использованием Kivy. Здесь у меня есть имена таблиц в качестве кнопок, а значения определяются метками. Используя функцию, я помещаю метки в соответствии с количеством строк и столбцов, , тогда я хочу заполнить их извне с помощью другой функции, она выдает Index_Error. Вот мой весь код.Невозможно динамически изменять текст метки в Kivy Python

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) 

Я хочу альтернативное решение для обновления имени ярлыка, просто вызвав функцию. Я знаю, что ярлыки в python не могут быть напрямую проиндексированы, но есть ли альтернативное решение?

ответ

1

Я думаю, что следующая строка должна иметь различный уровень indententation

self.Label_List.append(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) 
      #lbl.text = self.MyListOfElements[i][j] 
    #--->Now it's inside the first loop! 
     self.Label_List.append(self.LabelRow) 

Теперь вы будете иметь достаточное количество строк, так что AddLabel_Text не подведет

+0

Это функция AddLabel_Text, вызывающая проблему. Это другое заявление задумано сознательно. – FaultyProgrammer3107

+0

Это вызывает проблему, потому что вы не строили - это правильно, как я сказал в своем ответе –

+0

Хорошо, теперь это другая проблема. Он отображает только одну строку, а не все, и не отображает последний элемент в каждой строке. – FaultyProgrammer3107

 Смежные вопросы

  • Нет связанных вопросов^_^