Python Kivy小部件的新实例没有kv lang文件的属性
我为弹出窗口创建了一个类,并在kv文件中设置了title属性 当弹出窗口显示时,它没有kv文件中的标题,而是没有显示标题,就好像从未设置过一样 这与此处的问题完全相同,但我不了解此链接中的问题是什么或如何使其工作: 我知道如何使用kv lang中的ID来实现这一点,但只有当弹出窗口作为根窗口小部件(例如MainUI)的子窗口小部件时,它才起作用。然后我可以将python类的实例链接到kv文件中的小部件。 但是弹出窗口显示为根窗口小部件的一部分。 我想做的是,在单击new按钮时实例化popNewDB类的一个新实例,并让该实例使用KV文件中的“title”等值 你能解释一下怎么做吗 这是我的密码: py文件:Python Kivy小部件的新实例没有kv lang文件的属性,python,kivy,Python,Kivy,我为弹出窗口创建了一个类,并在kv文件中设置了title属性 当弹出窗口显示时,它没有kv文件中的标题,而是没有显示标题,就好像从未设置过一样 这与此处的问题完全相同,但我不了解此链接中的问题是什么或如何使其工作: 我知道如何使用kv lang中的ID来实现这一点,但只有当弹出窗口作为根窗口小部件(例如MainUI)的子窗口小部件时,它才起作用。然后我可以将python类的实例链接到kv文件中的小部件。 但是弹出窗口显示为根窗口小部件的一部分。 我想做的是,在单击new按钮时实例化popNew
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的原因吗?