Kivy - 向类中添加组件

-1 投票
2 回答
1930 浏览
提问于 2025-04-17 21:51

我想在一个类里添加一个小工具,但它没有成功。
举个例子:

from kivy.uix.button import Button
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
Builder.load_string('''
<test>:
    Label:
        text: "Hi!"
''')
class test(GridLayout):
    def build(self):
         pass
testbutton=Button(text="This I want to show on test class!")
test().add_widget(testbutton)
class apprun(App):
    def build(self):
        return test()
apprun().run()

运行的时候,这个不管用。

2 个回答

1

这是不是你想要的效果?

from kivy.uix.button import Button
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder

Builder.load_string('''
<test>:
    Label:
        text: "Hi!"
''')

class test(GridLayout):
    pass

class apprun(App):
    def build(self):
        t = test()
        b = Button(text="This I want to show on test class!")
        t.add_widget(b)     
        return t

apprun().run()

或者也许是这个...这样你的组件就不会互相重叠了。

from kivy.uix.button import Button
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.core.window import Window
from kivy.lang import Builder

Builder.load_string('''
<test>:
    Label:
        text: "Hi!"
''')

class test(GridLayout):
    pass

class apprun(App):
    def build(self):
        t = test(cols=1, size=Window.size)
        b=Button(text="This I want to show on test class!")
        t.add_widget(b)     
        return t

apprun().run()
2

通常来说,解释一下事情为什么不工作是个好习惯。比如,你可能会有一个有用的Python错误追踪信息,里面包含了关于发生异常的详细信息,或者你可能只是想说你没有得到预期的结果,这种情况下你应该解释一下具体情况。

在这个例子中,明显的问题是你试图从app继承,但你其实是想要App。因为app并不存在,所以会抛出一个异常。

你还试图在一个类定义(test)中添加一个小部件,而不是在类的实例(test())中添加。这也会失败,如果你不明白为什么,建议你去了解一下类定义和实例之间的区别。

另外,小部件并不需要一个build方法,这样做是没有任何作用的。

撰写回答