[英]Popup widget doesn't reopen in Kivy
当按下一个键弹出窗口 window 通过按下按钮打开,它关闭,但是当再次按下该键时,调用弹出窗口 window 会报错
WidgetException('无法添加 %r,它已经有父级 %r'
import json
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.popup import Popup
def read_json(file):
FileJson = open(file)
ObjJsom = json.load(FileJson)
return ObjJsom
data = read_json('Task.json')
counter = 0
task_Headline = data['Tasks'][counter]['Headline']
label = Label(text="Label test for StackoverFlow")
ConBox = BoxLayout(orientation="vertical")
clButt = Button(text="Close", size_hint=(1, 0.1))
ConBox.add_widget(label)
ConBox.add_widget(clButt)
def btn(instance):
show_popup(ConBox)
def show_popup(conten):
show = conten
popupWindow = Popup(title="Popup Window", content=show)
clButt.bind(on_press=popupWindow.dismiss)
popupWindow.open()
class Test(App):
def build(self):
butt = Button(text='Press')
butt.bind(on_press=btn)
return butt
if __name__ == '__main__':
Test().run()
当您创建Popup
时:
popupWindow = Popup(title="Popup Window", content=show)
它将show
添加到Popup
实例。 设置show
的parent
属性。 当Popup
被关闭时,使用上面的行创建了一个新的Popup
,它失败了,因为show
实例仍然认为它的父级是旧的Popup
(即使它已被关闭)。 并且任何小部件只能有一个父级。 解决方法是像这样从旧的Popup
中删除show
实例:
def show_popup(conten):
# make sure the content has no parent
if conten.parent is not None:
conten.parent.remove_widget(conten)
show = conten
popupWindow = Popup(title="Popup Window", content=show)
clButt.bind(on_press=popupWindow.dismiss)
popupWindow.open()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.