2017-11-11 3 views
1
でデータベースからスピナー内のデータを取得する

test.py

import sqlite3 as lite 

from kivy.uix.screenmanager import Screen 
from kivy.app import App 
from kivy.lang import Builder 
from kivy.core.window import Window 
from kivy.uix.popup import Popup 
from kivy.uix.treeview import TreeView, TreeViewLabel, TreeViewNode 
from kivy.uix.label import Label 
from kivy.properties import ObjectProperty 


Window.size = (700, 530) 

con = lite.connect('demo.db') 
con.text_factory = str 
cur = con.cursor() 


def populate_tree_view(tree_view, parent, node): 
    if parent is None: 
     tree_node = tree_view.add_node(TreeViewLabel(text=node['node_id'], 
                is_open=True)) 
    else: 
     tree_node = tree_view.add_node(TreeViewLabel(text=node['node_id'], 
                is_open=True), parent) 

    for child_node in node['children']: 
     populate_tree_view(tree_view, tree_node, child_node) 


tree = [{'node_id': 'Test2', 
     'children': []}, 
     {'node_id': 'Test3', 
     'children': []}] 


class TreeViewLabel(Label, TreeViewNode): 
    pass 


class TreeviewGroup(Popup): 
    treeview = ObjectProperty(None) 
    tv = ObjectProperty(None) 

    def __init__(self, **kwargs): 
     super(TreeviewGroup, self).__init__(**kwargs) 
     self.tv = TreeView(root_options=dict(text="Test1"), 
          hide_root=False, 
          indent_level=4) 
     for branch in tree: 
      populate_tree_view(self.tv, None, branch) 
     self.remove_widgets() 
     self.treeview.add_widget(self.tv) 

    def remove_widgets(self): 
     for child in [child for child in self.treeview.children]: 
      self.treeview.remove_widget(child) 


class GroupScreen(Screen): 
    groupName = ObjectProperty(None) 
    popup = ObjectProperty(None) 

    def display_groups(self, instance): 
     if len(instance.text) > 0: 
      self.popup = TreeviewGroup() 
      self.popup.open() 


class Group(App): 
    #cur.execute("SELECT * FROM `m_state` order by state_id asc") 
    #rows = cur.fetchall() 
    #print(rows) 
    rows = [(1, 'test1', 111), (2, 'test2', 112), (3, 'test3', 113), (4, 'test4', 114)] 
    def build(self): 
     self.root = Builder.load_file('test.kv') 
     return self.root 


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

test.kv

:kivy 1.10.0

<TreeViewLabel>: 
    on_touch_down: 
     app.root.stateName.text = self.text 
     app.root.popup.dismiss() 

<TreeviewGroup>: 
    id: treeview 
    treeview: treeview 
    title: "Select City" 
    size_hint: None, None 
    size: 400, 400 
    auto_dismiss: False 

    BoxLayout 
     orientation: "vertical" 
     BoxLayout: 
      id: treeview 
     Button: 
      size_hint: 1, 0.1 
      text: "Close" 
      on_release: root.dismiss() 


<[email protected]>: 
    text_size: self.size 
    valign: "middle" 
    padding_x: 5 

<[email protected]>: 
    multiline: False 

<[email protected]>: 
    background_color: 1, 1, 1, 1 
    size_hint_y: None 
    height: self.parent.height * 0.150 

GroupScreen: 
    stateName: stateName 

    GridLayout: 
     cols: 2 
     padding : 30,30 
     spacing: 10, 10 
     row_default_height: '40dp' 

     CustomLabel: 
      text: 'State Name' 

     SingleLineTextInput: 
      id: stateName 
      on_text: root.display_groups(self) 

     CustomLabel: 
      text: 'State Code' 

     Spinner: 
      text: "State Code" 
      values: ["111", "112", "113", "114"] 
      #background_color: color_button if self.state == 'normal' else color_button_pressed 
      background_down: 'atlas://data/images/defaulttheme/spinner' 
      #color: color_font 
      #option_cls: Factory.get("MySpinnerOption") 
      #size_hint: None, None 


     CustomLabel: 
      text: 'City Name' 

     SingleLineTextInput: 
      id: cityName 

     CustomLabel: 
      text: 'Short Name' 

     SingleLineTextInput: 
      id: shortName 

     CustomLabel: 
      text: 'Pin Code' 

     SingleLineTextInput: 
      id: pinCode 

     GreenButton: 
      text: 'Ok' 

     GreenButton: 
      text: 'Cancel' 

     Label: 

     Label: 

は、誰かが私を助けることができますか?
1.静的な画像状態コード111,112,113,114が表示されます。これらの状態コードを動的に表示するにはどうすればいいですか?
rows = [(1、 'test1'、111)、(2、 (3、 'test3'、113)、(4、 'test4'、114)]どのKivy

3番目のインデックス値は111,112,113,114になります。これらの値をスピナーに入れる方法は?あなたはKVに、あなたのグループクラスでlistproperty属性を設定することができます

答えて

3

は、このリストとスピナーの値を設定します。

の.py中:

... 

class Group(App): 
    #cur.execute("SELECT * FROM `m_state` order by state_id asc") 
    #rows = cur.fetchall() 
    #print(rows) 
    rows = [(1, 'test1', 111), (2, 'test2', 112), (3, 'test3', 113), (4, 'test4', 114)] 
    r = ListProperty() 
    r = [str(t[2]) for t in rows] 

... 

その後、で.kv

... 

Spinner: 
    text: "State Code" 
    values: app.r 

... 

私は場合にFUTの値の変更をLispropertyを使用していましたure

+0

ありがとうございます。 – Yash

+0

@yashkumarあなたは歓迎です –

+0

@yashkumarあなたの質問に「検索フィルタを追加」していましたが、削除したようです –