簡體   English   中英

使用kivy從另一個類中引用一個類的方法

[英]Referencing methods of a class from within a different class using kivy

我有一個具有多個屏幕的應用程序,並且試圖從另一個屏幕中調用ScreenOne的方法。 該代碼是一個最小的示例。

當我在第二個屏幕中時,我想知道引用ScreenOne的此方法的正確方法。

cart_list = {}

    class ScreenOne(Screen):
        def update_cart(self):
        cart_list.update({'Item one': 1.00})

        for key, value in cart_list:
            print(key, value)

     class ScreenTwo(Screen):
           pass

關聯的kv代碼如下

ScreenTwo:
    Button:
        id: item_1
        text: "Add to cart"
        on_press: MainScreen.update_cart()

KV文件

  1. id添加到ScreenOne。
  2. 默認情況下,每個屏幕都有一個屬性manager ,為您提供所用ScreenManager的實例。
  3. 使用root.manager.ids.screen_one.update_cart()引用該方法

以下是Python腳本中所需的一些次要更新。

py文件

  1. 在方法update_cart cart_list聲明為global
  2. .items()追加到cart_list例如for key, value in cart_list.items():

main.py

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder

cart_list = {}


class ScreenOne(Screen):

    def update_cart(self):
        global cart_list
        cart_list.update({'Item one': 1.00})

        for key, value in cart_list.items():
            print(key, value)


class ScreenTwo(Screen):
    pass


class TestApp(App):

    def build(self):
        return Builder.load_file('main.kv')


if __name__ == '__main__':
    TestApp().run()

main.kv

#:kivy 1.11.0

ScreenManager:
    ScreenOne:
        id: screen_one
        name: 'screen1'
    ScreenTwo:
        id: screen_two
        name: 'screen2'

<ScreenOne>:
    BoxLayout:
        Button:
            text: 'Goto Screen Two'
            on_press: root.manager.current = 'screen2'
        Button:
            text: 'Quit'


<ScreenTwo>:
    Button:
        id: item_1
        text: "Add to cart"
        on_press: root.manager.ids.screen_one.update_cart()

產量

產量

暫無
暫無

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

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