繁体   English   中英

弹出窗口小部件不会在 Kivy 中重新打开

[英]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实例。 设置showparent属性。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM