【发布时间】:2019-12-10 12:16:50
【问题描述】:
我是 Kivy 的新手:python。我正在尝试使用 ScreenManager 做一个应用程序。我有一张地图和地图键的想法应该在几个屏幕上生成按钮。例如: 地图:{user1:{thing1:value1,thing2,value2},user2:{thing1:value1...}} 第一个屏幕在滚动视图中有两个按钮:user1 和 user2。 下一个屏幕上的按钮集合将是thing1,thingN,具体取决于用户按下的“user_name”。这只是“玩具”项目,我正在研究 Kivy
我有一些全局变量。在第一个屏幕中,全局变量“user_name”根据用户在第一个屏幕上按下的内容进行初始化。然后在第二个屏幕的类中,我尝试使用 map_of_maps[user_name].keys() 并将这些键作为按钮放在第二个屏幕上。
# kivy_test.py
class MyMainApp(App):
gapi = gAPI("tilit.txt")
gapi.file_download()
gapi.parse_downloaded_file()
global data
global user_name
global account
data = gapi.get_data()
user_name = None
account = None
def build(self):
return kv
class MainWindow(Screen):
f_view = ObjectProperty(None)
def __init__(self,**kwargs):
super(MainWindow, self).__init__(**kwargs)
Clock.schedule_once(self.create_scrollview)
def create_scrollview(self, inst):
base = data.keys()
layout = GridLayout(cols=1)
layout.bind(minimum_height=layout.setter("height"))
for element in base:
button = Button(text=str(element), size_hint=(1, 0.1))
button.bind(on_press=self.on_scrbutton_pressed)
layout.add_widget(button)
scrollview = ScrollView(size=(Window.width, Window.height))
scrollview.add_widget(layout)
self.f_view.add_widget(scrollview)
def on_scrbutton_pressed(self, instance):
user_name = instance.text
print(instance.text)
class SecondWindow(Screen):
s_view = ObjectProperty(None)
def __init__(self,**kwargs):
super(SecondWindow,self).__init__(**kwargs)
Clock.schedule_once(self.create_scrollview)
def create_scrollview(self, inst):
base = data[user_name].keys() # Here I have a problem
layout = GridLayout(cols=1)
layout.bind(minimum_height = layout.setter("height"))
for element in base:
button = Button(text = str(element), size_hint=(1,0.1))
button.bind(on_press=self.on_scrbutton_pressed)
layout.add_widget(button)
scrollview = ScrollView(size=(Window.width, Window.height))
scrollview.add_widget(layout)
self.s_view.add_widget(scrollview)
def on_scrbutton_pressed(self, instance):
print(instance.text)
运行代码时出现错误:base = data[user_name].keys()。关键错误:无
# my.kv
# Filename: my.kv
WindowManager:
MainWindow:
SecondWindow:
ThirdWindow:
<MainWindow>:
name: "main"
f_view: f_view
GridLayout:
cols: 1
ScrollView:
id : f_view
# Button:
# text: "User1"
# on_release:
# app.root.current = "second"
# root.manager.transition.direction = "left"
# Button:
# text: "User2"
# on_release:
# app.root.current = "second"
# root.manager.transition.direction = "left"
<SecondWindow>:
name: "second"
s_view : s_view
GridLayout:
cols: 1
ScrollView:
id : s_view
Button:
text: "Add"
<ThirdWindow>:
name: "third"
t_view : t_view
GridLayout:
cols: 1
id : t_view
还有一个问题:在这种情况下如何在屏幕之间进行转换?
【问题讨论】:
标签: python dynamic kivy screen