从 Spinner on_text 问题更改屏幕
Changing screens from a Spinner on_text problem
我想使用 ScreenManager 创建一种工作流程,随着选项 selected 的进行。我在 ScreenManager 中定义了多个屏幕,在一个屏幕中我创建了一个带有多个选项的 Spinner。我想从 on_text 调用函数并传递 selected Spinner 值,根据传递的值执行任务,然后移动到工作流中的下一个屏幕。
我在 class(屏幕)中创建了一个函数,其中只有一个 print() 用于测试目的。当我 select 来自 Spinner 的选项时,没有任何反应。
我只提供了我认为相关的代码...
kv 文件:
<HomeScreen>:
name: 'homeScreen'
BoxLayout:
orientation: 'horizontal'
Label:
id: 'home'
text: 'Home Screen'
<NewSession>:
name: 'newSession'
BoxLayout:
orientation: 'vertical'
Label:
id: new
text: 'Create New Session'
Spinner:
size_hint: None, None
size: 100, 25
id: category
font_size: 12
text: "Food Category" #default value showed
values: ["Beef","Pork","Poultry", "Fish"] #list of values to show
on_text: root.SelectCut(category.text)
Widget:
<CurrentSession>:
id: cs
name: 'currentSession'
BoxLayout:
orientation: 'vertical'
Label:
id: cSession
text: root.cSession
<History>:
name: 'history'
BoxLayout:
orientation: 'vertical'
Label:
id: 'history'
text: 'History Data Screen'
<ScreenManagement>:
HomeScreen:
NewSession:
CurrentSession:
History:
<AllScreen>:
orientation: 'vertical'
ScreenManagement:
id: sm
BoxLayout:
size_hint_y: None
height: 60
spacing: 5
padding: 5, 5, 0, 5
Button:
text: 'Home'
on_press: root.ids.sm.current = 'homeScreen'
Button:
text: 'New Session'
on_press: root.ids.sm.current = 'newSession'
Button:
text: 'Current Session'
on_press:
root.ids.sm.current = 'currentSession'
Button:
text: 'History'
on_press: root.ids.sm.current = 'history'
py 文件:
Builder.load_file("screenLayout.kv")
class ScreenManagement(ScreenManager):
pass
class HomeScreen(Screen):
pass
class NewSession(Screen):
def SelectCut(self, text):
print("In Select Cut")
print("Food Category: " + text)
self.sm.current = 'homeScreen'
class CurrentSession(Screen):
pass
class History(Screen):
pass
class AllScreen(BoxLayout):
pass
class WorkingTestApp(App):
def build(self):
self.root = AllScreen()
return self.root
if __name__ == '__main__':
WorkingTestApp().run()
我无法弄清楚为什么当 selection 从 Spinner 生成时什么也没有发生,我不确定函数中移动到下一个的语法是什么屏幕.
更新:
当前代码(减去导入)
kv:
<HomeScreen>:
name: 'homeScreen'
BoxLayout:
orientation: 'horizontal'
Label:
id: 'home'
text: 'Home Screen'
<NewSession>:
name: 'newSession'
BoxLayout:
orientation: 'vertical'
Label:
id: new
text: 'Create New Session'
Spinner:
size_hint: None, None
size: 100, 25
id: category
font_size: 12
text: "Food Category" #default value showed
values: ["Beef","Pork","Poultry", "Fish"] #list of values to show
on_text: root.SelectCategory()
Widget:
<SelectCut>:
name: 'selectCut'
BoxLayout:
orientation: 'vertical'
Label:
id: 'cut'
text: 'Select Cut Screen'
Widget:
<CurrentSession>:
name: 'currentSession'
BoxLayout:
orientation: 'vertical'
Label:
id: cSession
text: 'Current Session Screen'
<History>:
name: 'history'
BoxLayout:
orientation: 'vertical'
Label:
id: 'history'
text: 'History Data Screen'
<ScreenManagement>:
HomeScreen:
NewSession:
SelectCut:
CurrentSession:
History:
<AllScreen>:
orientation: 'vertical'
ScreenManagement:
id: sm
BoxLayout:
size_hint_y: None
height: 60
spacing: 5
padding: 5, 5, 0, 5
Button:
text: 'Home'
on_press: root.ids.sm.current = 'homeScreen'
Button:
text: 'New Session'
on_press: root.ids.sm.current = 'newSession'
Button:
text: 'Current Session'
on_press:
root.ids.sm.current = 'currentSession'
Button:
text: 'History'
on_press: root.ids.sm.current = 'history'
py:
Builder.load_file("screenLayout.kv")
class ScreenManagement(ScreenManager):
pass
class HomeScreen(Screen):
pass
class NewSession(Screen):
# This Function isn't executing consistently.
def SelectCategory(self):
print("Food Category: " + self.ids.category.text)
self.manager.current = 'selectCut'
class SelectCut(Screen):
pass
class CurrentSession(Screen):
pass
class History(Screen):
pass
class AllScreen(BoxLayout):
pass
class WorkingTestApp(App):
def build(self):
self.root = AllScreen()
return self.root
if __name__ == '__main__':
WorkingTestApp().run()
将微调器的 on_text: root.SelectCut(self, text)
更改为 on_text: root.SelectCut()
在您的 .py 中将 def SelectCut(self, text):
更改为 def SelectCut(self):
然后更改您可以使用 self.ids.category.text
的文本读取或更改微调器的文本并将 root.ids.sm.current = 'your screen'
添加到此函数中
我想使用 ScreenManager 创建一种工作流程,随着选项 selected 的进行。我在 ScreenManager 中定义了多个屏幕,在一个屏幕中我创建了一个带有多个选项的 Spinner。我想从 on_text 调用函数并传递 selected Spinner 值,根据传递的值执行任务,然后移动到工作流中的下一个屏幕。
我在 class(屏幕)中创建了一个函数,其中只有一个 print() 用于测试目的。当我 select 来自 Spinner 的选项时,没有任何反应。
我只提供了我认为相关的代码...
kv 文件:
<HomeScreen>:
name: 'homeScreen'
BoxLayout:
orientation: 'horizontal'
Label:
id: 'home'
text: 'Home Screen'
<NewSession>:
name: 'newSession'
BoxLayout:
orientation: 'vertical'
Label:
id: new
text: 'Create New Session'
Spinner:
size_hint: None, None
size: 100, 25
id: category
font_size: 12
text: "Food Category" #default value showed
values: ["Beef","Pork","Poultry", "Fish"] #list of values to show
on_text: root.SelectCut(category.text)
Widget:
<CurrentSession>:
id: cs
name: 'currentSession'
BoxLayout:
orientation: 'vertical'
Label:
id: cSession
text: root.cSession
<History>:
name: 'history'
BoxLayout:
orientation: 'vertical'
Label:
id: 'history'
text: 'History Data Screen'
<ScreenManagement>:
HomeScreen:
NewSession:
CurrentSession:
History:
<AllScreen>:
orientation: 'vertical'
ScreenManagement:
id: sm
BoxLayout:
size_hint_y: None
height: 60
spacing: 5
padding: 5, 5, 0, 5
Button:
text: 'Home'
on_press: root.ids.sm.current = 'homeScreen'
Button:
text: 'New Session'
on_press: root.ids.sm.current = 'newSession'
Button:
text: 'Current Session'
on_press:
root.ids.sm.current = 'currentSession'
Button:
text: 'History'
on_press: root.ids.sm.current = 'history'
py 文件:
Builder.load_file("screenLayout.kv")
class ScreenManagement(ScreenManager):
pass
class HomeScreen(Screen):
pass
class NewSession(Screen):
def SelectCut(self, text):
print("In Select Cut")
print("Food Category: " + text)
self.sm.current = 'homeScreen'
class CurrentSession(Screen):
pass
class History(Screen):
pass
class AllScreen(BoxLayout):
pass
class WorkingTestApp(App):
def build(self):
self.root = AllScreen()
return self.root
if __name__ == '__main__':
WorkingTestApp().run()
我无法弄清楚为什么当 selection 从 Spinner 生成时什么也没有发生,我不确定函数中移动到下一个的语法是什么屏幕.
更新: 当前代码(减去导入)
kv:
<HomeScreen>:
name: 'homeScreen'
BoxLayout:
orientation: 'horizontal'
Label:
id: 'home'
text: 'Home Screen'
<NewSession>:
name: 'newSession'
BoxLayout:
orientation: 'vertical'
Label:
id: new
text: 'Create New Session'
Spinner:
size_hint: None, None
size: 100, 25
id: category
font_size: 12
text: "Food Category" #default value showed
values: ["Beef","Pork","Poultry", "Fish"] #list of values to show
on_text: root.SelectCategory()
Widget:
<SelectCut>:
name: 'selectCut'
BoxLayout:
orientation: 'vertical'
Label:
id: 'cut'
text: 'Select Cut Screen'
Widget:
<CurrentSession>:
name: 'currentSession'
BoxLayout:
orientation: 'vertical'
Label:
id: cSession
text: 'Current Session Screen'
<History>:
name: 'history'
BoxLayout:
orientation: 'vertical'
Label:
id: 'history'
text: 'History Data Screen'
<ScreenManagement>:
HomeScreen:
NewSession:
SelectCut:
CurrentSession:
History:
<AllScreen>:
orientation: 'vertical'
ScreenManagement:
id: sm
BoxLayout:
size_hint_y: None
height: 60
spacing: 5
padding: 5, 5, 0, 5
Button:
text: 'Home'
on_press: root.ids.sm.current = 'homeScreen'
Button:
text: 'New Session'
on_press: root.ids.sm.current = 'newSession'
Button:
text: 'Current Session'
on_press:
root.ids.sm.current = 'currentSession'
Button:
text: 'History'
on_press: root.ids.sm.current = 'history'
py:
Builder.load_file("screenLayout.kv")
class ScreenManagement(ScreenManager):
pass
class HomeScreen(Screen):
pass
class NewSession(Screen):
# This Function isn't executing consistently.
def SelectCategory(self):
print("Food Category: " + self.ids.category.text)
self.manager.current = 'selectCut'
class SelectCut(Screen):
pass
class CurrentSession(Screen):
pass
class History(Screen):
pass
class AllScreen(BoxLayout):
pass
class WorkingTestApp(App):
def build(self):
self.root = AllScreen()
return self.root
if __name__ == '__main__':
WorkingTestApp().run()
将微调器的 on_text: root.SelectCut(self, text)
更改为 on_text: root.SelectCut()
在您的 .py 中将 def SelectCut(self, text):
更改为 def SelectCut(self):
然后更改您可以使用 self.ids.category.text
的文本读取或更改微调器的文本并将 root.ids.sm.current = 'your screen'
添加到此函数中