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

2024-10-02 00:42:34 发布

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

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

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

这和这里的问题完全一样,但我不明白这个链接的问题是什么,也不知道如何让它工作: https://github.com/kivy/kivy/issues/751

我知道如何在kvlang中使用IDs来实现这一点,但是只有将弹出窗口作为根窗口小部件(例如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"

Tags: 文件实例textfromimportselfsize部件
1条回答
网友
1楼 · 发布于 2024-10-02 00:42:34

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

class MainUI(Widget):
    pop = ObjectProperty()

    def showpopup(self):
        if self.pop is None:
            self.pop = PopNewDB()
        self.pop.open()

在这里,第一次按下按钮时,PopNewDB的新实例将被创建并存储在self.pop。 (NB:I重命名了Popup子类,以大写字母开头,以符合语言标准和kivy期望)

相关问题 更多 >

    热门问题