【问题标题】:How to access change widget property on another screen via python如何通过python访问另一个屏幕上的更改小部件属性
【发布时间】:2017-10-05 12:29:56
【问题描述】:

我有一个有 3 个屏幕的应用程序。在其中我已经禁用了按钮,我希望无法根据我的 py 文件中的 IF 语句中的某些条件。

这是我的 main.kv

#:import FadeTransition kivy.uix.screenmanager.FadeTransition

ScreenManagement:
    transition: FadeTransition()
    MainScreen:
    ProjectScreen:
    ScopeScreen:

<MainScreen>:
    name: 'main'
    scope_button : scope_bttn
    BoxLayout:
        orientation: "vertical"
        spacing:10
        padding:10

#some wigedt..

        Button:
            on_press: app.root.current = 'project'
            text: 'Project Specification'
        Button:
            on_press: app.root.current = 'scope'
            text: 'Project Scope'
            disabled: True
            id: scope_bttn


<ProjectScreen>:
    name: 'project'      

        Button:
            on_release: app.root.current = 'main'
            text: 'Back'

        Button:
            text: 'Process'
            on_press: root.create_project()
            on_release: app.root.current = 'main'

<ScopeScreen>:
    name: 'scope'
#some widgets

这是我的 main.py 的相关部分

class MainScreen(Screen):
    pass

class ProjectScreen(Screen):
    def create_project(self):
        If something True:
          here I would like to change property of scope_bttn.disable to true

class ScopeScreen(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_file("main.kv")

class MainApp(App):
    def build(self):
        return presentation

ConfiguratorApp = MainApp()
ConfiguratorApp.run()

我知道我应该使用 id,但我找不到正确的教程。我是 kivy 和 python 的新手。

我们将不胜感激。

【问题讨论】:

    标签: python-3.x widget kivy


    【解决方案1】:

    使用 Kivy ObjectProperty 连接到 kv 文件中定义的 id。详情请参考以下示例。

    示例

    main.py

    ​​>
    from kivy.app import App
    from kivy.uix.screenmanager import ScreenManager, Screen
    from kivy.properties import ObjectProperty
    
    
    class ScreenManagement(ScreenManager):
        main_scrn = ObjectProperty(None)
    
    
    class MainScreen(Screen):
        scope_button = ObjectProperty(None)
    
    
    class ProjectScreen(Screen):
    
        def create_project(self, root_manager):
            print("scope_button.disabled={}".format(root_manager.main_scrn.scope_button.disabled))
            if root_manager.main_scrn.scope_button.disabled:
                root_manager.main_scrn.scope_button.disabled = False
                print("scope_button.disabled={}".format(root_manager.main_scrn.scope_button.disabled))
    
    
    class ScopeScreen(Screen):
        pass
    
    
    class ConfiguratorApp(App):
        def build(self):
            return ScreenManagement()
    
    
    if __name__ == "__main__":
        ConfiguratorApp().run()
    

    configurator.kv

    #:kivy 1.10.0
    #:import FadeTransition kivy.uix.screenmanager.FadeTransition
    
    <ScreenManagement>:
        transition: FadeTransition()
        main_scrn: main_screen
        MainScreen:
            id: main_screen
        ProjectScreen:
        ScopeScreen:
    
    <MainScreen>:
        name: 'main'
        scope_button : scope_bttn
        BoxLayout:
            orientation: "vertical"
            spacing:10
            padding:10
    
    #some wigedt..
    
            Button:
                text: 'Project Specification'
                on_press: root.manager.current = 'project'
            Button:
                text: 'Project Scope'
                disabled: True
                id: scope_bttn
                on_press: root.manager.current = 'scope'
    
    
    <ProjectScreen>:
        name: 'project'
        BoxLayout:
            orientation: "vertical"
            spacing:10
            padding:10
    
            Button:
                on_release: root.manager.current = 'main'
                text: 'Back'
    
            Button:
                text: 'Process'
                on_press: root.create_project(root.manager)
                on_release: root.manager.current = 'main'
    
    <ScopeScreen>:
        name: 'scope'
        #some widgets
    

    输出

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      相关资源
      最近更新 更多