2017-12-07 3 views
0

Ich versuche, Texteingabe zu nehmen, speichern Sie es in einem jsonstore, dann verwenden Sie jede einzelne Taste in der jsonstore als den Text auf einer Schaltfläche. Ich habe alle relevanten Dokumente gelesen, die mir einfallen, ich habe versucht, Google zu suchen, und ich habe versucht, hier zu suchen. Ich habe versucht, die Schlüssel indizieren, aber das wird nicht unterstützt. Ich kann es wirklich nicht herausfinden. Es ist das letzte Hauptmerkmal, dass ich alles laufen lassen muss.Wie kann ich einzelne JSON-Speicherschlüssel für den Text auf einer Schaltfläche mit Kivy verwenden?

Hier ist mein Python-Skript für den Teil, über den ich spreche.

class ScreenSix(Screen): 

def Create_ShopList(self): 
    store = JsonStore('user_meals.json') 
    ingredients = store.get(self._name.text)['ingredients'] 
    return ingredients 

def Meal_Options(self): 
    store = JsonStore('users_meals.json') 
    meals = store.keys() 
    return meals 

Hier ist der relevante Teil meiner kv-Datei.

<ScreenSix>: 
name: 'shoplist' 
id: shoplist 

FloatLayout: 
    canvas: 
     Rectangle: 
      pos: self.pos 
      size: self.size 
      source: '20.png' 

    Label: 
     text: 'Create Shopping List' 
     font_size: 60 
     pos_hint: {'center_x':.5,'center_y':.8} 
     color: 0,0,0,1 

    Label: 
     text: 'Which meals would you like to add?' 
     font_size: 40 
     pos_hint: {'center_x':.5,'center_y':.7} 
     color: 0,0,0,1 

    Button: 
     text: 'Menu' 
     font_size: 36 
     size_hint: .2,.1 
     pos_hint: {'left':1,'y':0} 
     on_release: app.root.current='menu' 

    Button: 
     text: 'Quit' 
     font_size: 36 
     size_hint: .2,.1 
     pos_hint: {'right':1,'y':0} 
     on_release: app.root.current='open' 

    Button: 
     text: '' 
     font_size: 36 
     size_hint: .2,.1 
     pos_hint: {'center_x':.18,'center_y':.6} 
     on_release: root.Create_ShopList() 

    Button: 
     text: '' 
     font_size: 36 
     size_hint: .2,.1 
     pos_hint: {'center_x':.39,'center_y':.6} 

    Button: 
     text: '' 
     font_size: 36 
     size_hint: .2,.1 
     pos_hint: {'center_x':.6,'center_y':.6} 

    Button: 
     text: '' 
     font_size: 36 
     size_hint: .2,.1 
     pos_hint: {'center_x':.81,'center_y':.6} 

Ich möchte die Tasten Text bekommen die Namen zu sein, die als Schlüssel in meiner json Speicherung gespeichert werden. Die letzten paar Knöpfe sind die Knöpfe, auf denen die Namen der Mahlzeiten stehen sollen, und ich benutze den ersten als Testknopf, während ich versuche, es herauszufinden. Ich mache mir Sorgen, dass ich das vielleicht nicht kann, und wenn das der Fall ist, weiß ich nicht, was eine gute Alternative wäre.

Antwort

1

Sie könnten dafür RecycleView verwenden.
Ich habe ein wenig exapmle davon gemacht.
Versuchen Sie folgendes:

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.button import Button 
from kivy.uix.recycleview import RecycleView 

from kivy.storage.jsonstore import JsonStore 


store = JsonStore("buttons.json") 

store.put('button1', font_size="40sp", color=(1,.5,.5, 1)) 
store.put('button2', font_size="20sp", color=(.5,1, 1, 1)) 
store.put('button3', font_size="30sp", color=(1,.5,.5, 1)) 
store.put('button4', font_size="10sp", color=(.5,1, 1, 1)) 

for i in store: store[i]["text"] = i  

items = [store[i] for i in store] 


class MyButton(Button): 

    def print_data(self,data): 
     print(data) 


class MyRecycleView(RecycleView): 

    def __init__(self, **kwargs): 
     super(MyRecycleView,self).__init__(**kwargs) 
     self.data = items 
     self.refresh_from_data() 


KV = ''' 

<MyButton>: 
    on_release: 
     root.print_data(self.text) 

BoxLayout: 
    orientation: 'vertical' 
    MyRecycleView: 
     id: rv 
     viewclass: 'MyButton' 
     RecycleBoxLayout: 
      orientation: 'vertical' 
      default_size: None, dp(56) 
      default_size_hint: 1, None 
      size_hint_y: None 
      height: self.minimum_height 

''' 


class Test(App): 
    def build(self): 
     root = Builder.load_string(KV) 
     return root 


Test().run() 
+0

Okay, dass der Text auf den Tasten bekommen gearbeitet, aber jetzt kann ich nicht scheinen, um herauszufinden, wie die Tasten auf Position die Art und Weise, die ich will. Ich möchte sie in der Mitte des Bildschirms sehen, und ich kann das anscheinend nicht tun. –

+0

nvm Ich fand es heraus lol –

Verwandte Themen