Kivy - 向小组添加小部件

时间:2014-03-11 23:30:11

标签: python widget kivy

我正在尝试将一个小部件添加到一个类但它无法正常工作。 例如:

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 个答案:

答案 0 :(得分:2)

通常很好的做法是解释 事情如何不起作用。例如,您可能有一个有用的python回溯,包括有关引发的异常的信息,或者您可能只是意味着您没有得到您期望的结果,在这种情况下您应该解释如何。

在这种情况下,显而易见的问题是,当您的意思是app时,您尝试继承App。由于app不存在,这将引发异常。

您还尝试将小部件添加到类定义(test)而不是类的实例(test())。这也将失败,如果你不明白为什么你应该阅读类定义和实例之间的区别。

此外,小部件不需要build方法,这将不执行任何操作。

答案 1 :(得分:0)

这就是你想要的吗?

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()