有人能告诉我这个结构哪里出了问题吗?

2024-05-08 13:16:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从我的.kv调用一个函数,但是我找不到正确的方法来引用绘制小部件的函数之外的函数。我试过了根.dostuff起源。。。自我。。。我的应用程序。。。应用程序。。。我可以把这个函数放到Widgets类中,但这会破坏其他东西。。。你知道吗

你知道吗我的应用程序.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()

你知道吗百万千瓦地址:

Button:
    text: "Press Me"
    on_press: dostuff(1)

Tags: 方法函数py应用程序部件def绘制widgets
2条回答

你有两个问题。第一个是函数dostuff没有在kv文件中定义。你可以用#:import dostuff MyApp.dostuff导入它,或者把它变成app类的方法,然后用app.dostuff()调用它。你知道吗

此外,您的kv文件实际上没有加载。如果要加载它而不显示它将生成的按钮,那么您的示例实际上不会演示您的问题。将文件命名为my.kv以使其自动加载,并且不要从build method返回任何内容以使您的按钮用作根小部件。你知道吗

the correct way to reference a function outside the function that draws the widgets.

您还可以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)

...
...

I've tried root.dostuff parent... self... MyApp... App.

以下是rootapp在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()

I could put the function into the Widgets class, but that breaks other stuff...

好吧,别让函数那样做。你知道吗

相关问题 更多 >