加载表单后如何运行函数 Kivy

Posted

技术标签:

【中文标题】加载表单后如何运行函数 Kivy【英文标题】:How do I run a function once the form is loaded Kivy 【发布时间】:2014-08-31 02:22:11 【问题描述】:

我在 python 中有一个 kivy 程序,它有一个文本框和几个按钮。我已经用 kivy 语言编写了 ui,我需要运行一个函数来更新文本框并等待用户按下按钮。当所有小部件都已加载时,是否有我可以使用的 on_load 属性或某种东西来运行此功能。 .kv 文件:

<MainGui>:
   id: layout1
   orientation: 'horizontal'
   #I would like for some sort of event like below to run my function:
   on_load: root.myfunction()

【问题讨论】:

你能把你的代码贴出来吗,有点不清楚你想要什么。 您找到解决方案了吗?如果可以的话可以发一下吗? @user1816847:刚刚发布了答案,请查看:) 【参考方案1】:
from kivy.app           import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label     import Label

class DemoApp(App):

    def build(self):
        self.layout = layout = BoxLayout()
        layout.label = Label(text="INITIAL TEXT")
        layout.add_widget(layout.label)
        return(self.layout)

    def on_start(self, **kwargs):
        self.layout.label.text = "APP LOADED"

DemoApp().run()

【讨论】:

这个例子很好,只要不期望正确设置宽度和高度。 on_start 确实是一个很好的解决方案!谢谢!【参考方案2】:

我不确定您所说的“已加载”到底是什么意思(也就是说,小部件创建的哪个方面对您的功能很重要),但也许您可以使用 on_parent,它在小部件添加到另一个时发生小部件。

【讨论】:

我所说的加载的意思是窗口显示在屏幕上所有的小部件,然后我希望它运行一些代码。 'on_parent' 似乎是布尔值,所以我无法运行它的功能,感谢您的建议 为什么当布尔值改变时不能运行函数? 因为我必须使用 while 循环来检查它是否为真,这将阻止程序运行直到它为真。小部件无法加载。 不,当布尔值发生变化时,你应该使用 kivy 的事件系统来做一些事情,而不是用你自己的循环重新发明那个***。正如我所说,您可以绑定到on_parent 事件,或者将内容放入on_parent 方法中。 on_parent 事件似乎为位于 .kv 文件中的小部件触发了两次。我分享@chromebookbob 的愿望,希望从.kv 文件中的空白标签和按钮开始,我一开始就以编程方式填充该文件。这不是特别明显。【参考方案3】:
from kivy.app import App
from kivy.uix.label import Label
from kivy.clock import Clock
import time


class Time (Label):
    def update (self, *args):
       self.text = time.strftime('%H:%M:%S')


class TimeApp (App):
    def build(self):
        time = Time()
        Clock.schedule_interval(time.update, 1) #replace here
        return time
if __name__ == '__main__':
    app = TimeApp()
    app.run()

update func in Time 应用开始时加载的类 您可以定义任何函数或类并替换它,您也可以添加更多类和函数,但请记住 build 返回一个对象,因此最终在一个对象中管理您的程序

【讨论】:

以上是关于加载表单后如何运行函数 Kivy的主要内容,如果未能解决你的问题,请参考以下文章

在 kivy 中非常频繁地运行函数 (Kivy Clock/FreeClock)

Kivy App 使用 Buildozer 构建。 APK 崩溃

在 Kivy/Python 中作为线程运行时表现奇怪的函数

在每个组件完成加载后如何在 Angular 2 中运行 jquery 函数

Flutter:如何在运行 JavaScript 函数并显示 html 后等待 WebView 完成加载?

如何使用 python 和 kivy 获取函数外的值