我是使用Kivy GUI框架的新手,并且有几个与kvlang相关的问题:
1.如何将自定义窗口小部件类添加到kv文件的根目录中?(示例)
PS:我在这里使用clear_widgets()
,然后尝试添加自定义小部件,但单击按钮后出现错误。
#:kivy 1.8
<HelloWorldForm@BoxLayout>:
orientation: "vertical"
Label:
text:"Hello world"
Button:
text: "Go back"
on_press: app.formGoBack()
<MainForm@BoxLayout>:
orientation: "vertical"
btnOpenForm: btnChangeForm
BoxLayout:
size_hint_y:None
height:"40dp"
Button:
id:btnChangeForm
text:"Go to hello world form"
on_press:
root.clear_widgets()
root.add_widget(HelloWorldForm)
Button:
id:btnExit
text:"Exit"
on_press: app.Exit()
MainForm:
如何使用
HelloWorldForm
方法添加add_widget
小部件类2.如何在python代码中使用
add_widget
和clear_widgets
方法?(例如)主.kv
<MainForm@BoxLayout>:
orientation: "vertical"
btnOpenForm: btnChangeForm
BoxLayout:
size_hint_y:None
height:"40dp"
Button:
id:btnChangeForm
text:"Go to hello world form"
on_press: app.changeForm()
main.py
#!/usr/bin/python3.4
import kivy
kivy.require('1.8.0')
from kivy.app import App
from kivy.uix import *
class MainApp(App):
def changeForm(self)
/**
TO-DO
**/
app=MainApp()
app.run()
3.如何在python中访问kvlang属性?例如,我想从按钮中获取文本。我该如何实现?
最佳答案
root.add_widget(HelloWorldForm)
。您要添加一个类而不是一个类实例。特别是,您可能希望每次调用时都添加相同的实例,而不是创建一个新实例,因此您应该而不是做root.add_widget(HelloWorldForm())
。 我建议在您的python代码中添加:
class MainApp(App):
def build(self):
self.helloworldform = HelloWorldForm()
self.mainform = MainForm()
return self.mainform
并在您的kv中用
root.add_widget(HelloWorldForm)
替换root.add_widget(app.helloworldform)
这将添加您在构建函数中定义的HelloWorldForm实例。self.mainform.clear_widgets()
self.mainform.add_widget(self.helloworldform)
self.mainform.btnOpenForm.text = 'This will change the text of the button.'
您执行
btnOpenForm: btnChangeForm
很奇怪。这将保存对btnChagneForm的引用,但名称为btnOpenForm。为什么不使用相同的名称? btnChangeForm: btnChangeForm
关于python - 奇异的理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25844093/