Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kivy小部件的新实例没有kv lang文件的属性_Python_Kivy - Fatal编程技术网

Python Kivy小部件的新实例没有kv lang文件的属性

Python Kivy小部件的新实例没有kv lang文件的属性,python,kivy,Python,Kivy,我为弹出窗口创建了一个类,并在kv文件中设置了title属性 当弹出窗口显示时,它没有kv文件中的标题,而是没有显示标题,就好像从未设置过一样 这与此处的问题完全相同,但我不了解此链接中的问题是什么或如何使其工作: 我知道如何使用kv lang中的ID来实现这一点,但只有当弹出窗口作为根窗口小部件(例如MainUI)的子窗口小部件时,它才起作用。然后我可以将python类的实例链接到kv文件中的小部件。 但是弹出窗口显示为根窗口小部件的一部分。 我想做的是,在单击new按钮时实例化popNew

我为弹出窗口创建了一个类,并在kv文件中设置了title属性

当弹出窗口显示时,它没有kv文件中的标题,而是没有显示标题,就好像从未设置过一样

这与此处的问题完全相同,但我不了解此链接中的问题是什么或如何使其工作:

我知道如何使用kv lang中的ID来实现这一点,但只有当弹出窗口作为根窗口小部件(例如MainUI)的子窗口小部件时,它才起作用。然后我可以将python类的实例链接到kv文件中的小部件。 但是弹出窗口显示为根窗口小部件的一部分。 我想做的是,在单击new按钮时实例化popNewDB类的一个新实例,并让该实例使用KV文件中的“title”等值

你能解释一下怎么做吗

这是我的密码:

py文件:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.popup import Popup
from kivy.properties import ObjectProperty

class popNewDB(Popup):
    pass

class MainUI(Widget):
    pop = ObjectProperty(popNewDB())

    def showpopup(self):
        self.pop.open()


class VerseReminder(App):
    def build(self):
        return MainUI()


if __name__ == '__main__':
    VerseReminder().run()
kv文件:

#:kivy 1.9.1

<popNewDB>
    title: 'Hallo'

<MainUI>
    Label:
        pos: root.center_x - self.width/2,root.center_y + 200
        text: "Quote Reminder"
    BoxLayout:
        size_hint: None,None
        width: 400
        height: 200
        pos: root.center_x-200,root.center_y-50
        orientation: 'vertical'
        spacing: 20
        Button:
            size_hint: 1,1
            text: "New..."
            on_press: root.showpopup()
        Button:
            size_hint: 1,1
            text: "Open..."
        Button:
            size_hint: 1,1
            text: "Quit"
#:kivy 1.9.1
标题:“你好”
标签:
位置:根中心x-自身宽度/2,根中心y+200
文本:“报价提醒”
盒子布局:
大小提示:无,无
宽度:400
身高:200
位置:根中心x-200,根中心y-50
方向:“垂直”
间距:20
按钮:
大小提示:1,1
正文:“新…”
按:root.showpopup()
按钮:
大小提示:1,1
文本:“打开…”
按钮:
大小提示:1,1
文本:“退出”

在计算
pop=ObjectProperty(popNewDB())
时,尚未加载规则,因此只会创建一个基本的
弹出窗口。相反,您可以这样做:

class MainUI(Widget):
    pop = ObjectProperty()

    def showpopup(self):
        if self.pop is None:
            self.pop = PopNewDB()
        self.pop.open()
在这里,第一次按下按钮时,将创建一个新的
PopNewDB
实例并存储在
self.pop
中。
(注意:为了符合语言标准和kivy的期望,我重命名了弹出子类,以大写字母开头)

谢谢。我只需在“showpopup”函数下添加一个“pop=popNewDB()”,并直接在类下删除ObjectProperty定义,就可以使它正常工作。但是,据我所知,“pop”将仅限于“showpopup”功能,我以后将无法引用它-对吗?这就是您首先在类中创建ObjectProperty的原因吗?