【发布时间】:2015-01-22 04:13:40
【问题描述】:
我希望有人能告诉我如何让微调器在加载应用时记住它的值。
我正在考虑使用 from kivy.storage.jsonstore import JsonStore 来存储和检索用户在数据库中选择的值,这很容易。
但是经过几个小时的搜索,我找不到任何关于使微调器在加载时说出该值的文档。
例如,我的微调器中有很多项目(大约 60 个),滚动浏览需要一段时间,正如我所说,我可以记住最后选择的项目,但我不知道如何将其设为默认值。
Spinner:
id: stationSpinner
text:'Select a Station'
values: ('Reset Saved Station','Appledore','Axminster','Bampton','Barnstaple','Bere Alston','Bideford','Bovey Tracey','Braunton','Bridgwater','Brixham','Buckfastleigh','Budleigh Salterton','Burnham on Sea','Camels Head','Castle Cary','Chagford','Chard','Cheddar','Chulmleigh','Colyton','Combe Martin','Crediton','Crewkerne','Crownhill','Cullompton','Dartmouth','Dawlish','Danes Castle','Middlemoor','Exmouth','Frome','Glastonbury','Greenbank','Hartland','Hatherleigh','Holsworthy','Honiton','Ilfracombe','Ilminster','Ivybridge','Kingsbridge','Kingston','Lundy Island','Lynton','Martock','Minehead','Modbury','Moretonhampstead','Nether Stowey','Newton Abbot','North Tawton','Okehampton','Ottery St Mary','Paignton','Plympton','Plymstock','Porlock','Princetown','Salcombe','Seaton','Shepton Mallet','Sidmouth','Somerton','South Molton','Street','Taunton','Tavistock','Teignmouth','Tiverton','Topsham','Torquay','Torrington','Totnes','USAR','Wellington','Wells','Williton','Wincanton','Witheridge','Wiveliscombe','Woolacombe','Yelverton','Yeovil')
size_hint: None, None
size: (150, 44)
pos_hint: {'center_x':0.5, 'y': 0.35}
on_text: app.show_selected_value()
所以第一次加载应用时,它会显示“选择电台”。第二次加载它显示最后选择的电台。显然我已经把reset选项放进去清除db文件。
我尝试过使用
SvdStn = store.get('Stations')['Saved']
self.root.station.text = SvdStn
但它不起作用,我猜它相当简单,但由于我找不到任何关于它的文档,我无法理解它......我会继续寻找,也许会从不同的方向,也许在微调器旁边选择最后一个按钮时按钮变为可见,但如果 db 为空,则将 visible 属性设置为 false。
编辑:这是我的代码py file and logo on onedrive
欢迎任何想法
谢谢
雷夫
这是代码的相关部分:
import kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import ObjectProperty
from kivy.storage.jsonstore import JsonStore
from os.path import join
kv = '''
<IncidentScreen>:
canvas.before:
Color:
rgba: 1, 1, 1, 1
Rectangle:
pos: self.pos
size: self.size
station: stationSpinner
Image:
source:'DSFRSLogo.png'
allow_stretch:True
pos_hint: {'root.x':0.5, 'y':.2}
Spinner:
id: stationSpinner
text:'Select a Station'
values: ('Reset Saved Station','Appledore','Axminster','Bampton','Barnstaple','Bere Alston','Bideford','Bovey Tracey','Braunton','Bridgwater','Brixham','Buckfastleigh','Budleigh Salterton','Burnham on Sea','Camels Head','Castle Cary','Chagford','Chard','Cheddar','Chulmleigh','Colyton','Combe Martin','Crediton','Crewkerne','Crownhill','Cullompton','Dartmouth','Dawlish','Danes Castle','Middlemoor','Exmouth','Frome','Glastonbury','Greenbank','Hartland','Hatherleigh','Holsworthy','Honiton','Ilfracombe','Ilminster','Ivybridge','Kingsbridge','Kingston','Lundy Island','Lynton','Martock','Minehead','Modbury','Moretonhampstead','Nether Stowey','Newton Abbot','North Tawton','Okehampton','Ottery St Mary','Paignton','Plympton','Plymstock','Porlock','Princetown','Salcombe','Seaton','Shepton Mallet','Sidmouth','Somerton','South Molton','Street','Taunton','Tavistock','Teignmouth','Tiverton','Topsham','Torquay','Torrington','Totnes','USAR','Wellington','Wells','Williton','Wincanton','Witheridge','Wiveliscombe','Woolacombe','Yelverton','Yeovil')
size_hint: None, None
size: (150, 44)
pos_hint: {'center_x':0.5, 'y': 0.35}
on_text: app.show_selected_value()
'''
class IncidentScreen(FloatLayout):
station = ObjectProperty(None)
results = ObjectProperty(None)
data_dir = App().user_data_dir
store = JsonStore(join(data_dir, 'storage.json'))
try:
store.get('stations')['saved']
except KeyError:
SvdStn = ""
else:
SvdStn = store.get('stations')['saved']
print(SvdStn)
self.root.station.text = SvdStn
class DSFRSapp(App):
def build(self):
Builder.load_string(kv)
fl = IncidentScreen()
return fl
if __name__ =="__main__":
DSFRSapp().run()
【问题讨论】:
-
按照您的尝试设置其文本应该可以。你能发布一个演示完整代码的最小工作示例吗?
-
最小的工作示例?...不,哈哈,因为我不知道那是什么....有没有办法可以上传 py 文件?
-
类 IncidentScreen(FloatLayout): station = ObjectProperty(None) results = ObjectProperty(None) data_dir = App().user_data_dir store = JsonStore(join(data_dir, 'storage.json')) 尝试: store.get('stations')['saved'] 除了 KeyError: SvdStn = "" else: SvdStn = store.get('stations')['saved'] self.root.station.text = SvdStn class DSFRSapp(App ): def build(self): Builder.load_string(kv) fl = IncidentScreen() return fl
-
嗯,看起来很乱!我真的想上传文件还是可以通过电子邮件发送? @inclement
-
最小的工作示例是指最小的示例(不包含用于演示问题的不必要代码)并且可以运行(代码可以运行并演示问题)。如果您想显示 .py 文件,请将其编辑到您的原始帖子中。
标签: python-3.x spinner kivy jsonstore getselection