簡體   English   中英

如何在 kivy 中選擇下拉值時在屏幕之間導航?

[英]How do I navigate between screens on selecting a dropdown value in kivy?

我的 kivy 應用中有多個屏幕: 1. 主屏幕、屏幕 1、屏幕 2、屏幕 3 和屏幕 4。

主屏幕有主下拉列表和子下拉列表。 主下拉菜單顯示組,在選擇特定組時,子下拉菜單顯示與該組關聯的屏幕。

從子下拉列表中選擇時,我想導航到特定屏幕。 我的代碼沒有顯示任何錯誤,但我無法導航到選定的屏幕。 請幫忙。

文件

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ListProperty, DictProperty

class windowManager(ScreenManager):
    pass

class MainScreen(Screen):
    values_dict = {'Group1':['Screen1', 'Screen2'],
              'Group2':['Screen3', 'Screen4']}

    sub_values = ListProperty()

    def values_update(self,text):
        self.sub_values = self.values_dict[text]
        if text != 'Select group type':
            self.ids.sub_drop.text = 'select ' + text + ' screen'
            return 'select ' + text + ' screen'

    def open_screen(self, text):        
        if text != 'select ' + self.ids.main_drop.text + ' screen':
            sm = windowManager()
            sm.current = text

class Screen1(Screen):    
    pass

class Screen2(Screen):
    pass

class Screen3(Screen):
    pass

class Screen4(Screen):
    pass

class appln(App):                
    def build(self):    
        return windowManager()            

if __name__=="__main__":
    appln().run()

應用程序

<WindowManager>:
    MainScreen:
    Screen1:
    Screen2:
    Screen3:
    Screen4:


<MainScreen>:
    name: 'main'

    GridLayout:
        cols:2
        Spinner:
            id: main_drop
            size_hint: None, None
            size: 200, 100
            pos_hint:{'top': 1}
            text: 'Select group type'
            values: root.values_dict.keys()
            on_text:
                root.values_update(self.text)

        Spinner:
            id: sub_drop
            size_hint: None, None
            size: 230, 100
            pos_hint:{'top': 1}
            values: root.sub_values
            on_text: root.open_screen(self.text)


<Screen1>:
    name: 'Screen1'
    Label:
        text: 'This is screen 1'

<Screen2>:
    name: 'Screen2'
    Label:
        text: 'This is screen 2'

<Screen3>:
    name: 'Screen3'
    Label:
        text: 'This is screen 3'

<Screen4>:
    name: 'Screen4'
    Label:
        text: 'This is screen 4'

在您的MainScreen代碼中,該行:

sm = windowManager()

正在創建windowManager的新實例,因此對該實例的任何使用都不會影響實際管理您的ScreenswindowManager 要解決此問題,只需將該行替換為對正確windowManager的引用:

sm = self.manager

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM