Kivy:将数据传递到另一个类弹出菜单

2024-09-29 19:26:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Kivy(1.10)python3.4.4制作一个简单的GUI,使用弹出窗口显示另一个类的信息。但是当我使用functioninit将变量从一个类(principal)传递到用popup(selectionador)构造的类时,我遇到了一些问题

当我使用该功能时崩溃(abre\u selectionador)

在主.py在

import kivy
kivy.require('1.10.0')

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
from kivy.config import Config

Config.set('graphics','width', 800)
Config.set('graphics','height',500)

class CustomPopup(Popup):
    pass

class Seleccionador(Popup):

    def __init__(self,idea):
        super().__init__()
        self.idea_texto =idea

class Principal(BoxLayout):
    def abre_popup(self):

        the_popup =CustomPopup()
        the_popup.open()

    def abre_seleccionador(self):
        idea ='idea brillante'
        popin= Seleccionador(idea)
        popin.open()

class KvpopApp(App):
    title = 'Pruebas de pop up y filechooser'
    def build(self):
        return Principal()

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

kv文件:

^{pr2}$

Tags: fromimportselfconfigappdefclasspopup
1条回答
网友
1楼 · 发布于 2024-09-29 19:26:48

在初始化类之前(在执行__init__方法之前)对Kv语言规则进行求值,因此此时实例属性不存在。最简单的方法是使用StringProperty

from kivy.app import App
from kivy.config import Config
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.properties import StringProperty


Config.set('graphics', 'width', 800)
Config.set('graphics', 'height',500)


class CustomPopup(Popup):
    pass


class Seleccionador(Popup):
    idea_texto = StringProperty()    # <<<<<<<<<<<<<<<<<<<<

    def __init__(self, idea, **kwargs):
        super(Seleccionador, self).__init__(**kwargs)
        self.idea_texto = idea

class Principal(BoxLayout):
    def abre_popup(self):
        the_popup = CustomPopup()
        the_popup.open()

    def abre_seleccionador(self):
        idea = 'idea brillante'
        popin = Seleccionador(idea)
        popin.open()


class KvpopApp(App):
    title = 'Pruebas de pop up y filechooser'

    def build(self):
        return Principal()


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

相关问题 更多 >

    热门问题