加载表单后如何运行函数 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 崩溃
在每个组件完成加载后如何在 Angular 2 中运行 jquery 函数