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属性を設定することができます
ありがとうございます。 – Yash
@yashkumarあなたは歓迎です –
@yashkumarあなたの質問に「検索フィルタを追加」していましたが、削除したようです –