【问题标题】:accessing id from one class to another class in kivy在kivy中从一个类访问另一个类的id
【发布时间】:2019-07-20 12:09:11
【问题描述】:

我想从 main 类访问一个 id 到 fahim2_pop 类。想要访问从文本输入(在主类中)到当有人按下搜索按钮时将出现的弹出小部件的单词。当有人搜索“hello”并按下搜索按钮时,弹出小部件将出现,并且在该弹出小部件中,标签的文本将与 textinput 中的“hello”相同。但标签和 id 仍然属于不同的类别。怎么办?

python 代码

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.properties import *

class fahim2_pop(Popup):
    pass
class main(BoxLayout):  
    def word(self):
        pop=fahim2_pop()
        pop.open()

class CallApp(App):
    def build(self):
        return main()

CallApp().run()

kv码

Builder.load_string('''

<main>:
    BoxLayout:
        orientation:"vertical"
        TextInput:
            id:word
        Button:
            text:"search"
            on_press:root.word()

<fahim2_pop>:
    id:pop
    title:"result"
    BoxLayout:
        Label:
            text:app.root.ids.word.text 

''')

【问题讨论】:

  • 有几种方法可以从另一个类访问id,但具体如何完成取决于您的应用程序的结构(您尚未共享的代码)。这就是为什么我们要求您发布minimal reproducible example
  • 我已经添加了我的完整代码。现在请给出解决方案

标签: python kivy


【解决方案1】:

由于main 是您应用的根,您可以使用App.get_running_app().root.ids.word 从应用中的任何位置访问TextInput。所以,你可以在你的Popup 中使用它,方法是在你的kv 中使用它:

<fahim2_pop>:
    id:pop
    title:"result"
    BoxLayout:
        Label:
            text:app.root.ids.word.text 

而你fahim2_pop可以很简单:

class fahim2_pop(Popup):
    pass

【讨论】:

  • 如果 main 不是我的应用程序的根目录怎么办?你说因为 main 是根它是文本:app.root.ids.word.text。但是如果 main 不是根怎么办?那应该是什么?
  • 这个问题没有一个答案。这完全取决于您的应用程序的结构。您可以保存对类实例的引用,在方法之间传递它们,或者将实例引用与ids 字典结合使用,甚至可以使用全局变量。
猜你喜欢
  • 2021-09-30
  • 2023-01-07
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 2023-04-07
  • 2020-11-24
相关资源
最近更新 更多