首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在自定义应用程序重启方法中相互复制的Python Kivy小部件

在自定义应用程序重启方法中相互复制的Python Kivy小部件
EN

Stack Overflow用户
提问于 2021-09-03 13:45:14
回答 1查看 74关注 0票数 0

基本上,我正在开发一个由多个屏幕组成的Kivy应用程序。最近,我决定给我的应用程序一个小的Refresh按钮,它可以刷新窗口小部件,并重新读取保存文件,以达到某种调试目的,然后我当然从this question's answer上窃取了代码,就像每个程序员都会做的那样。它起作用了,但有一个小问题:每次我按下刷新按钮,不管是什么原因,小部件都会被复制并放在彼此的顶部(即使重新启动功能事先清除了以前的小部件)。以下是我的简化代码:

test.py

代码语言:javascript
运行
复制
from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen
from kivy.config import Config


Config.set("kivy", "exit_on_escape", 0)


class First(Screen):
    pass


class Second(Screen):
    pass


class Test(MDApp):
    def restart(self):

        self.root.clear_widgets()
        self.stop()
        Test().run()


Test().run()

test.kv

代码语言:javascript
运行
复制
ScreenManager:
    First:
    Second:
    
<First>:
    MDFloatLayout:

        MDTextField:
            size_hint: 0.8, 0.2
            pos_hint: {'center_x': 0.5, 'top': 0.9}
            hint_text: 'owo uwu test im a furry yes'

        MDRectangleFlatButton:
            text: 'Restart'
            size_hint: 0.15, 0.1
            pos_hint: {'center_x': 0.5, 'center_y': 0.5}
            on_release: app.restart()

<Second>:

还要注意,我之所以在这个示例应用程序中使用screens,尽管没有办法访问Second屏幕,是因为我做了一些测试,结果是只有当ScreenManager是根类时才会出现“错误”,其他像FloatLayout这样的程序工作正常。其次,我在本例中使用KivyMD的原因是,由于提示文本的动画效果,使用MDTextField可以更容易地检测到小部件的重复。

有没有人知道问题背后的原因,以及解决方案?任何帮助都将不胜感激。

编辑:以下是演示图片:

在重新启动之前:

重启后:

EN

Stack Overflow用户

回答已采纳

发布于 2021-09-03 16:54:16

这个问题是,由于Kivy根据文件名自动加载,您的test.kv文件被加载了两次。修复方法是自己控制kv文件的加载。为此,请将kv文件的名称更改为test.kv以外的任何名称,例如not_test.kv。然后在Test App中创建一个build()方法

代码语言:javascript
运行
复制
class Test(MDApp):
    def build(self):
        from kivy.resources import resource_find

        filename = 'not_test.kv'
        filename = resource_find(filename) or filename
        if filename in Builder.files:
            Builder.unload_file(filename)
        return Builder.load_file(filename)

这段代码卸载kv文件(如果它已经被加载),然后再次加载它以获得根小部件。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69045966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档