我正在尝试用Python+Kivy制作一个应用程序。每当我尝试在PyCharm中运行它时,它都会说DigitalLove().run()
有错误TypeError: 'NoneType' object is not callable
。完整日志如下:
[INFO ] [Logger ] Record log in C:\Users\paisseon\.kivy\logs\kivy_20-08-28_14.txt
[INFO ] [deps ] Successfully imported "kivy_deps.gstreamer" 0.2.0
[INFO ] [deps ] Successfully imported "kivy_deps.angle" 0.2.0
[INFO ] [deps ] Successfully imported "kivy_deps.glew" 0.2.0
[INFO ] [deps ] Successfully imported "kivy_deps.sdl2" 0.2.0
[INFO ] [Kivy ] v2.0.0rc3, git-20c14b2, 20200615
[INFO ] [Kivy ] Installed at "C:\Users\paisseon\AppData\Roaming\Python\Python38\site-packages\kivy\__init__.py"
[INFO ] [Python ] v3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:43:08) [MSC v.1926 32 bit (Intel)]
[INFO ] [Python ] Interpreter at "C:\Users\paisseon\AppData\Local\Programs\Python\Python38-32\python.exe"
[INFO ] [Factory ] 185 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_pil (img_sdl2, img_ffpyplayer, img_gif ignored)
Traceback (most recent call last):
File "C:/Users/paisseon/Downloads/DigitalLove/main.py", line 846, in <module>
DigitalLove().run()
File "C:\Users\paisseon\AppData\Roaming\Python\Python38\site-packages\kivy\app.py", line 949, in run
self._run_prepare()
File "C:\Users\paisseon\AppData\Roaming\Python\Python38\site-packages\kivy\app.py", line 919, in _run_prepare
root = self.build()
TypeError: 'NoneType' object is not callable
我刚刚开始学习Kivy,所以请原谅我,如果这是一个初学者的错误,但我无法通过搜索这里或谷歌找到解决方案
提前感谢:)
编辑: 最小可重复示例
main.py
from kivy.app import App
from kivy.lang import Builder
GUI = Builder.load_file('main.kv')
class DigitalLove(App):
@property
def build(self):
return GUI
monika_art = 'images/monika.png'
textbox_img = 'images/textbox.png'
doki_response = 'example text'
if __name__ == "__main__":
DigitalLove().run()
主要额定电压:
<GUI>:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: root.monika_art
TextInput:
id: user_input
text: root.textinput_text
multiline: False
font_size: '12sp'
# Add pos_hint and size_hint
GridLayout:
rows: 1
Image:
source: root.textbox_img
pos: self.parent.pos
size: self.parent.size
# Add pos_hint and size_hint
Label:
text: root.doki_response
font_size: '16sp'
center: self.parent.center
这里有几个问题:
build()
方法使用@property
装饰器kv
中引用了GUI
,但尚未定义GUI
类kv
中引用了几个root.
属性(这些属性将引用GUI
类中的属性),但它们没有定义李>build()
方法的return
后面有一些代码。在return
之后的任何代码都不会被执行李>kv
中,缩进生成canvas
的TexInput
和GrdLayout
子级,但这不起作用李>kv
中,顶级规则是<GUI>:
,它创建了创建GUI
类实例时要遵循的规则,但您没有创建此类实例的代码。您可以通过将<GUI>:
更改为GUI:
或者更好地将类名更改为Gui
来解决这个问题李>以下是您的代码的修改版本,包含上述更正:
main.py:
主要额定电压:
没有
<>
的kv
中的顶级规则将成为根小部件(在kv
文件中只允许一个)。加载kv
文件时,将创建并返回根小部件(如果定义了根小部件)另外,创建与类(
GUI
)同名的变量(GUI
)是一个坏主意。这可能有用,但很危险相关问题 更多 >
编程相关推荐