2017-01-28 13 views
0

GUIのようなテーブルに行を追加しようとしています。 これらの行はラベルのリストになります。 - その ラベル内のテキストになります文字列のリストを追加するには動的更新Kivyラベルのテキストを読み取ることができません

  • のAddRow:更新され 各行は、そのクラスの次のメソッドがあります。
  • AddLabel -
  • をその行にラベルを追加し、ラベルのリストを追加AddLabelRow - 実際の表にリスト行を作成し、 テキストへ
  • 「空」ChangeLableTextを初期化は、 - 文字列の入力リストを受け取り、そのクラスのラベル内の文字列を変更します。

は、私は、このクラスのオブジェクトContentList []のリストを初期化メソッドを呼び出す しかし、オブジェクトのChangeLabelTextが呼び出されていない問題で、ContentListのためのテキストのみが[0]に更新されています。

import json 
import requests 
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 AddContent(GridLayout): 
    #response = requests.get("http://localhost:10010/") 
    # Get the response data as a python object. Verify that it's a dictionary. 
    #data = response.json()[3] 
    #Column_keys = ["country", "date", "answered_calls", "total_calls", "asr", "mou", "aou"] 
    RowList = [] 
    Label_List = [] 
    size = 0 
    def AddRow(self, InputList): 
     self.RowList = InputList 
     self.size = len(InputList) 

    def AddLabel(self,LayoutObj): 
     lbl = Label(size_hint_y = None, height = 30) 
     LayoutObj.add_widget(lbl) 
     return lbl 

    def AddLabelRow(self,LayoutObj): 
     for i in range(self.size): 
      Lbl = self.AddLabel(LayoutObj) 
      Lbl.text = "empty" 
      #self.Label_List[i].text = data[Column_keys[i]] 
      #Lbl.text = str(self.data[self.Column_keys[i]]) 
      self.Label_List.append(Lbl) 

    def ChangeLabel_ListText(self, TextList): 
     for i in range(self.size): 
      #self.Label_List[i].text = data[Column_keys[i]] #data is fetched from Db 
      self.Label_List[i].text = TextList[i] 



class TableView(GridLayout): 
    Col_Names = ["Date","Vendor","Country","MOU","ASR","AOU"] 
    ContentList = [AddContent(),AddContent(),AddContent()] 
    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.ContentList[0].AddRow(['1sample1','1sample2','1sample3','1sample4','1sample5','1sample6']) 
     self.ContentList[1].AddRow(['2sample1','2sample2','2sample3','2sample4','2sample5','2sample6']) 
     self.ContentList[2].AddRow(['3sample1','3sample2','3sample3','3sample4','3sample5','3sample6']) 

     for i in range(3): 
      self.ContentList[i].AddLabelRow(self.layout) 

     self.ContentList[2].ChangeLabel_ListText(['a','b','c','d','e','f']) 

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

self.ContentList[2].ChangeLabel_ListText(['a','b','c','d','e','f']) 更新インデックスに与えられるどんな数の最初の行のみ。

私はこの1週間、私の頭を壊しています。私は当初、同じ出力を出した2つのクラスではなく、1つのクラスでこれをやっていました。 ヘルプが大いに役立ちます。ありがとう!

+0

私の答えはあなたの問題を解決しました:ここ

は完全なソリューションですか?そうでない場合は、私に知らせてください。はいの場合は、それを合格とマークすることを検討してください。 – yogabonito

+0

あなたの答えをありがとう。できます。 – FaultyProgrammer3107

答えて

1

最初の問題は、RowList、Label_List、およびサイズがクラスのコードにあることです。しかし、それぞれのインスタンスに個別に設定する必要があります。解決策:このような__init__メソッド内でこれらの属性を初期化:

def __init__(self, **kwargs): 
    super(AddContent, self).__init__(**kwargs) 
    self.RowList = [] 
    self.Label_List = [] 
    self.size = 0 

第二の問題は、(あなたのクラスがサブクラス化された)GridLayoutsizeという属性が含まれていること、です。解決策:そのように、この属性に別の名前を選ぶ:

self.length = 0 

あなたが今、あなたのi番目ContentList -entryが変更されます

self.ContentList[i].ChangeLabel_ListText(['a','b','c','d','e','f']) 

を行う場合。

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 AddContent(GridLayout): 
    #response = requests.get("http://localhost:10010/") 
    # Get the response data as a python object. Verify that it's a dictionary. 
    #data = response.json()[3] 
    #Column_keys = ["country", "date", "answered_calls", "total_calls", "asr", "mou", "aou"] 
    def __init__(self, **kwargs): 
     super(AddContent, self).__init__(**kwargs) 
     self.RowList = [] 
     self.Label_List = [] 
     self.length = 0 

    def AddRow(self, InputList): 
     self.RowList = InputList 
     self.length = len(InputList) 

    def AddLabel(self,LayoutObj): 
     lbl = Label(size_hint_y=None, height=30) 
     LayoutObj.add_widget(lbl) 
     return lbl 

    def AddLabelRow(self,LayoutObj): 
     for i in range(self.length): 
      Lbl = self.AddLabel(LayoutObj) 
      Lbl.text = "empty" 
      #self.Label_List[i].text = data[Column_keys[i]] 
      #Lbl.text = str(self.data[self.Column_keys[i]]) 
      self.Label_List.append(Lbl) 

    def ChangeLabel_ListText(self, TextList): 
     for i in range(self.length): 
      #self.Label_List[i].text = data[Column_keys[i]] #data is fetched from Db 
      self.Label_List[i].text = TextList[i] 



class TableView(GridLayout): 
    Col_Names = ["Date","Vendor","Country","MOU","ASR","AOU"] 
    ContentList = [AddContent(),AddContent(),AddContent()] 
    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.ContentList[0].AddRow(['1sample1','1sample2','1sample3','1sample4','1sample5','1sample6']) 
     self.ContentList[1].AddRow(['2sample1','2sample2','2sample3','2sample4','2sample5','2sample6']) 
     self.ContentList[2].AddRow(['3sample1','3sample2','3sample3','3sample4','3sample5','3sample6']) 

     for i in range(3): 
      self.ContentList[i].AddLabelRow(self.layout) 

     self.ContentList[2].ChangeLabel_ListText(['a','b','c','d','e','f']) 

if __name__ == '__main__': 
    Table = TableView() 
    runTouchApp(Table.layout) 
関連する問題