亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將一個變量從一個類傳遞到另一個類?

如何將一個變量從一個類傳遞到另一個類?

狐的傳說 2023-03-01 16:19:22
我正在使用 Kivy 和 Kivymd。class Admin我在和之間傳遞變量時遇到問題class EditArticle。我需要my_string從 Admin 傳遞到 EditArticle。我正在嘗試這樣做,但得到一個空字符串。所以,在class Admin我有my_string. 然后,在edit_article我class Admin為my_string. 然后我試圖edit以 class EditArticle. 但它一直是空的。我真的想不通。如果您運行我的代碼,您將點擊頂部菜單admin。然后點擊任何mdchip。然后單擊對話窗口中的 etit 按鈕。然后點擊按鈕獲取my_string(但它總是空的)。這是我的 App.py我的應用程序.kv <WindowManager>    Container:        id: scr_1        name: 'container'    Detail:        id: scr_2        name: 'detail'    Admin:        id: scr_3        name: 'admin'    EditArticle:        id: scr_4        name: 'edit-article'        var: scr_3.my_string # <---------    ResultSearch:        id: scr_5        name: 'result-search'    UserSettings:        id: scr_6        name: 'settings'<Admin>:    BoxLayout:        id: boxlayout_1        orientation: 'vertical'        MDToolbar:            pos_hint: {'top': 1}            title: 'Admin Blog'            left_action_items: [["arrow-left", lambda x: app.callback()]]        ScrollView:            MDStackLayout:                adaptive_height: True                padding: 10                spacing: dp(5)                id: box<EditArticle>    MDToolbar:        title: 'Admin Blog'    MDLabel:        text: str(root.var)    MDRaisedButton:        text: 'click me to see a variable in console'        pos_hint: {'center_x': .5, 'center_y': .5}        on_release: root.edit(root)<MyToolbar@CustomToolbar>:    size_hint_y: None    height: self.theme_cls.standard_increment    padding: "25dp"    spacing: "12dp"    MDLabel:        id: label        text: 'Blog'        font_style: 'H6'        theme_text_color: "Custom"        text_color: 1,1,1,1    Widget:    MDIconButton:        id: button_2        icon: "dots-vertical"        pos_hint: {"center_y": .5}        theme_text_color: "Custom"        text_color: 1,1,1,1        on_release: root.menu.open()<Container>
查看完整描述

3 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

根本原因:

在您的應用程序中,有兩個class Admin實例化的實例。


WindowManager()當您在方法中實例化根時,第一個實例在 kv 文件中實例化build。


片段:

<WindowManager>:

    ...


    Admin:

        id: scr_3

        name: 'admin'

    ...

第二個實例在class BlogChip.


片段:

class BlogChip(MDChip):

    get_admin = Admin()

    ...

類屬性my_string在 的第二個實例中更新class Admin。但是屏幕正在引用由根實例化的實例。因此,應用程序顯示空字符串。


解決方案:

該解決方案需要更改 kv 和 python 文件。


kv文件:

替換 callback: root.get_admin.get_article 為 callback: app.root.ids.scr_3.get_article


片段:

<BlogChip>

    label: root.title

    icon: ''

    callback: app.root.ids.scr_3.get_article

蟒蛇文件:

刪除get_admin = Admin()在class BlogChip(MDChip):

片段:

class BlogChip(MDChip):

    id = NumericProperty()

    title = StringProperty()

    body = StringProperty()

在方法中,edit()初始化類屬性,var

片段:

class EditArticle(Screen):

    var = StringProperty()


    def edit(self, instance):

        # Each screen has by default a property manager that 

        # gives you the instance of the ScreenManager used.

        self.var = self.manager.ids.scr_3.my_string

        print(self.var, ' << it is going to be <my_string> from Admin')

輸出:

http://img1.sycdn.imooc.com//63ff0acd00012ab113660767.jpg

查看完整回答
反對 回復 2023-03-01
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

我真的不明白你在你的代碼中做了什么?

你為什么不直接看看Admin.my_string你的內部EditArticle class?

如果這不起作用,您是否嘗試getter為您的my_string屬性創建一個?
抱歉,我不知道它是如何StringProperty工作的……但是你不能在 中做類似下面的事情嗎Agent class

def get_my_string(): 
   return my_string.value()

然后你就打電話Agent.get_my_string()給你的EditArticle班級。


查看完整回答
反對 回復 2023-03-01
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

這是我的問題的解決方案。我必須添加EditArticle.my_string = self.my_string這樣class Admin的內容:


def edit_article(self, instance):

    EditArticle.my_string = self.my_string

    App.get_running_app().window_manager.current = 'edit-article'

    self.dialog_get_article.dismiss()

在此之后我可以得到它class EditArticle()


查看完整回答
反對 回復 2023-03-01
  • 3 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號