如何在Pycharm中使用Kivy(1.10.1)解释器(Community Edition 2018.3.5)

问题描述 投票:0回答:1

我想开始学习Kivy。我一直在使用Pycharm作为我的Python编程IDE。如何将默认的python解释器更改为kivy解释器,以便pycharm可以识别kivy代码?

我已经安装了kivy.app并创建了符号链接。我也用pip安装了kivy。在我的python程序中,我已经能够从kivy.app成功导入App并且它可以工作。但是当我编写代码来设计一个小部件(在本例中是一个Box布局)时,Pycharm以红色下划线并且不执行代码。

The following code works fine:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

class Widget1(BoxLayout):
    pass

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

if __name__ == "__main__":
    MyApp().run()

But when I write the following code to design the Box Layout, it doesn't work. Pycharm underlines: Widget1, Button, text and Label (Error written is: Unresolved Reference)

<Widget1>
    Button:
        text: "Please click here"
    Label:
        text: "Button has not been clicked yet"

如果所有代码都有效,那么在运行之后,它应该将Box Layout分成两部分。一部分是可点击的按钮,上面写着“请点击这里”,另一部分只是一个标有“按钮尚未点击”的标签。但是现在当我跑步时,它只返回一个空的Box布局(没有标签,没有按钮,没有文字)。

python-3.x pycharm kivy kivy-language
1个回答
0
投票

Question 2

Box Layout代码(<Widget1>)仍然不起作用。

Solution

1)kv文件名

由于您没有使用Kivy Builder加载您的kv代码/文件,因此您按名称约定加载kv代码/文件。确保您的kv文件名是my.kv

Kv language » How to load KV

有两种方法可以将Kv代码加载到您的应用程序中:

按名称惯例:

Kivy以小写形式查找与App类同名的Kv文件,如果以“App”结尾,则减去“App”,例如:

MyApp -> my.kv

如果此文件定义了Root Widget,它将附加到App的root属性,并用作应用程序窗口小部件树的基础。

按构建器约定:您可以告诉Kivy直接加载字符串或文件。如果此字符串或文件定义了根窗口小部件,则该方法将返回该窗口小部件:

Builder.load_file('path/to/file.kv')

要么:

Builder.load_string(kv_string)

2)kv规则上下文

在你的kv文件中,在类规则:之后添加<Widget1>(完整冒号)

片段

<Widget1>:

Kv language » Rule Context

Kv源构成规则,用于描述Widget的内容,您可以有一个根规则,以及任意数量的类或模板规则。

通过声明根小部件的类来声明根规则,没有任何缩进,后跟:并将被设置为App实例的根属性:

Widget:

一个类规则,由<>之后的小部件类的名称声明,后跟:,定义如何以图形方式表示该类的任何实例:

<MyWidget>:

规则使用缩进进行分隔,因为python,每个级别的缩进应该是四个空格,就像python良好实践建议一样。

Question 1

但是当我编写代码来设计一个小部件(在本例中是一个Box布局)时,Pycharm以红色下划线并且不执行代码。

Solution

您必须安装KV语言自动完成文件。

  1. 下载此文件,PyCharm_kv_completion.jar
  2. 在PyCharm的欢迎窗口的右下角,单击配置 - >导入设置。
  3. 选择刚刚下载的jar文件,PyCharm将显示​​一个带有文件类型的对话框。单击确定。
  4. 重新启动PyCharm以使更改生效。
© www.soinside.com 2019 - 2024. All rights reserved.