Python 在Kivy中创建按钮

Python 在Kivy中创建按钮,python,button,kivy,Python,Button,Kivy,我曾经和Kivy一起工作过一段时间,现在我想再把它捡起来。由于某些原因,我在创建按钮时遇到了困难。脚本运行时没有错误,但没有生成任何内容(我得到一个黑屏)。我错过了什么 main.py from kivy.app import App from kivy.uix.widget import Widget from kivy.uix.label import Label class MainScreen(Widget): pass class SimpleWidget(Widget

我曾经和Kivy一起工作过一段时间,现在我想再把它捡起来。由于某些原因,我在创建按钮时遇到了困难。脚本运行时没有错误,但没有生成任何内容(我得到一个黑屏)。我错过了什么

main.py

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.label import Label


class MainScreen(Widget):
    pass


class SimpleWidget(Widget):
    pass


class MyApp(App):
    def build(self):
        return MainScreen()


if __name__ == '__main__':
    MyApp().run()
main.kv

<SimpleWidget>
    Button:
        on_press: print('It's working')

<MainScreen>
    BoxLayout:
        orientation: 'vertical'
        SimpleWidget:
            text: 'Train & Model'
            color: 'red'
            background_color: 'grey'
            font_size: 30
        SimpleWidget:
            text: 'Model'
            color: 'blue'
            background_color: 'grey'
            font_size: 30

按钮:
在印刷机上:打印(“它正在工作”)
盒子布局:
方向:“垂直”
SimpleWidget:
文本:“火车和模型”
颜色:“红色”
背景颜色:“灰色”
字体大小:30
SimpleWidget:
文本:“模型”
颜色:“蓝色”
背景颜色:“灰色”
字体大小:30

您的问题是,.kv文件未加载。Kivy说,如果您的kv文件名为“main.kv”,并且与main.py文件位于同一目录中,那么应该自动加载它。对我来说,这从未发生过,所以我喜欢显式加载文件。 注意:我还删除了boxlayout的“方向”参数,因为它会导致以下问题:

main.py:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.lang import Builder

class MainScreen(Widget):
    pass


class SimpleWidget(Widget):
    pass


class MyApp(App):
    def build(self):
        kv = Builder.load_file("main.kv")
        return MainScreen()


if __name__ == '__main__':
    MyApp().run()
<SimpleWidget>
    Button:
        on_press: print("It's working")

<MainScreen>
    BoxLayout:
        SimpleWidget:
            text: 'Train & Model'
            color: 'red'
            background_color: 'grey'
            font_size: 30
        SimpleWidget:
            text: 'Model'
            color: 'blue'
            background_color: 'grey'
            font_size: 30
main.kv:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.lang import Builder

class MainScreen(Widget):
    pass


class SimpleWidget(Widget):
    pass


class MyApp(App):
    def build(self):
        kv = Builder.load_file("main.kv")
        return MainScreen()


if __name__ == '__main__':
    MyApp().run()
<SimpleWidget>
    Button:
        on_press: print("It's working")

<MainScreen>
    BoxLayout:
        SimpleWidget:
            text: 'Train & Model'
            color: 'red'
            background_color: 'grey'
            font_size: 30
        SimpleWidget:
            text: 'Model'
            color: 'blue'
            background_color: 'grey'
            font_size: 30

按钮:
按:打印(“它正在工作”)
盒子布局:
SimpleWidget:
文本:“火车和模型”
颜色:“红色”
背景颜色:“灰色”
字体大小:30
SimpleWidget:
文本:“模型”
颜色:“蓝色”
背景颜色:“灰色”
字体大小:30

是的,这很有效!您已将生成器设置为
kv
,但不在任何地方调用
kv
?另外,我在那里有方向来创建两个按钮。看起来按钮是叠在一起的?老实说,我不能告诉你。它似乎以两种方式加载文件。我最近与另一位用户进行了一次小讨论,他声称,如果文件遵循约定,显式加载kv文件不是一个好主意。如前所述,对我来说,这从未发生过,所以请留意任何问题。至于方向:我再次查看了您的代码,发现“It's working”有一些问题,因为它包含一个撇号。对我来说,删除这一行似乎是最简单的解决办法。请随意再添加一次。是的,我也注意到了这一点,我确实解决了。一切都在运转,但不是“T”。只创建了一个按钮,位于应用程序的左下方。上面没有文本,也没有遵循我上面使用的属性。但是,它会打印出正在工作的
文本。