如何在kivy + python中作为函数访问

时间:2019-05-17 14:10:09

标签: python kivy

我正在尝试创建一个用于学生状态控制的应用程序,但无法访问python类中的函数。

我尝试了很多方法都没有成功。

arq.py

class Tela(ScreenManager):
    pass
class Chamada(Screen):
    def chamada_func(self):
        self.ids.grid.add_widget(Label(text = 'teste')) 
        #I would like to press the call button, add the grid label

class Nota(Screen):
    pass
class Prg(App):
    def build(self):
        self.Chamada = Chamada()
        return Tela()

Prg().run()

arq.kv

<Tela>:
    Screen:
        name: 'Principal'
        BoxLayout:
            id: box_principal
            orientation: 'vertical'
            padding: 50
            spacing: 100
            Button:
                text: 'Chamada'
                on_release: root.current = 'Chamada'
            Button:
                text: 'Nota'
                on_release: root.current = 'Nota'   
            Button:
                text: 'Sair'
    Chamada:
        name: 'Chamada'
        BoxLayout:
            id: box_chamada
            orientation: 'vertical'
            GridLayout:
                id: grid

1 个答案:

答案 0 :(得分:0)

问题2

  

在班级内部的按钮上使用此按钮:会如何?

解决方案2:kv文件-从实现它的类中调用一个方法

以下解决方案说明了如何通过kv文件从类中的另一个子级调用chamada_func()中实现的方法class Chamada()

        on_release: root.chamada_func()

摘要

<Chamada>:
    name: 'Chamada'

    BoxLayout:
        id: box_chamada
        orientation: 'vertical'

        GridLayout:
            id: grid

        Button:
            text: 'ok'
            size_hint: 1, 0.05
            on_release: root.chamada_func()

问题1

  

如何访问功能?

解决方案1:kv文件-从另一个类/屏幕调用方法

以下解决方案说明了如何从kv文件中的另一个类/屏幕调用chamada_func()中实现的方法class Chamada()

  • 在屏幕上添加id: chamada
  • 使用Chamada:调用方法
  • on_release: root.ids.chamada.chamada_func()方法中删除self.Chamada = Chamada(),因为您不希望对象build()有两个实例。最重要的是,在kv文件中实例化的实例将具有视图/表示,而在Chamada方法中实例化的另一个实例将没有视图。
  • 在kv文件中,添加类别规则build

摘要

main.py
<Chamada>:
KV文件
class Tela(ScreenManager):
    pass

class Chamada(Screen):
    def chamada_func(self):
        self.ids.grid.add_widget(Label(text = 'teste')) 


class Nota(Screen):
    pass


class Prg(App):
    def build(self):
        return Tela()

Prg().run()