如何解决弹出窗口小部件未在Kivy中重新打开
按下某个键时,弹出的窗口会通过按按钮打开,它会关闭,但是再次按下该键时,调用弹出窗口会出错
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
实例。这样就设置了parent
的{{1}}属性。取消show
并在上面的行中创建新的Popup
时,它将失败,因为Popup
实例仍然认为其父级是旧的show
(即使它是已被撤职)。而且任何小部件只能有一个父级。解决方法是像这样从旧的Popup
中删除show
实例:
Popup
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。