我试图从我的.kv调用一个函数,但是我找不到引用绘制小部件的函数之外的函数的正确方法。我已经尝试过root.dostuff parent ... self ... MyApp ... App ...我可以把这个函数放到Widgets类中,但这会打破其他东西......
MyApp.py
class Widgets(Widget):
pass
def dostuff(x):
print(x)
class MyApp(App):
def build(self):
global w
print("Build")
w = Widgets()
return w
if __name__ == "__main__":
MyApp().run()
MyApp.kv:
Button:
text: "Press Me"
on_press: dostuff(1)
答案 0 :(得分:3)
你有两个问题。第一个是函数dostuff
未在kv文件中定义。您可以使用#:import dostuff MyApp.dostuff
导入它,也可以使其成为例如app.dostuff()
的方法。 app类并使用my.kv
调用它。
此外,您的kv文件实际上并未加载。要加载它并且你没有显示它会产生的按钮,所以你的例子实际上不会证明你的问题。将文件命名为{{1}}以使其自动加载,并且不从构建方法返回任何内容以将Button用作根小部件。
答案 1 :(得分:0)
引用函数外部函数的正确方法 绘制小部件。
您还可以define on_press() outside the kv file
:
from kivy.uix.button import Button
from kivy.app import App
def dostuff(x):
print("x is %s" % x)
class MyButton(Button):
def on_press(self):
dostuff(22)
class MyApp(App):
def build(self):
return MyButton()
MyApp().run()
my.kv:
<MyButton>:
text: "Press Me"
或者on_press() inside the kv file
:
my.kv:
<MyButton>:
text: "Press Me"
on_press: self.dostuff(10, 20) #Look in MyButton class for dostuff()
...
...
class MyButton(Button):
def dostuff(self, *args):
print(args)
...
...
我已经尝试过root.dostuff parent ... self ... MyApp ... App。
以下是root
和app
在kv文件中的工作方式:
my.kv:
<MyWidget>: #This class is the 'root' of the following widget hierarchy:
Button:
text: "Press Me"
on_press: root.dostuff(20, 'hello') #Look in the MyWidget class for dostuff()
size: root.size #fill MyWidget with the Button
from kivy.uix.widget import Widget
from kivy.app import App
class MyWidget(Widget):
def dostuff(self, *args):
print(args)
class MyApp(App):
def build(self):
return MyWidget()
MyApp().run()
或者,你可以put the function inside the App class
:
my.kv:
<MyButton>:
text: "Press Me"
on_press: app.dostuff('hello', 22)
from kivy.app import App
from kivy.uix.button import Button
class MyButton(Button):
pass
class MyApp(App):
def dostuff(self, *args):
print(args)
def build(self):
return MyButton()
MyApp().run()
我可以将该函数放入Widgets类中,但这会打破其他类 东西...
好吧,不要让这个功能做到这一点。