我为Popup创建了一个类,并在kv文件中设置了title属性。
当弹出窗口显示时,它没有kv文件中的标题,而是显示No Title,就好像它从未设置过一样。
这与此处的问题完全相同,但我不明白这个链接是什么问题或如何使其工作: https://github.com/kivy/kivy/issues/751
我理解如何使用kv lang中的ID来执行此操作,但这仅在将Popup作为根窗口小部件(例如,MainUI)的子窗口小部件时才有效。然后我可以将python类的实例链接到kv文件中的小部件。 但随后弹出窗口显示为根小部件的一部分。 我想要做的是,在单击“新建”按钮时实例化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"
答案 0 :(得分:0)
在评估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:我将Popup子类重命名为以大写字母开头,以符合语言标准和kivy期望)