【发布时间】:2019-10-17 14:02:27
【问题描述】:
我的代码有问题。我想在我的python文件中实现一个带有kv语言数据的字符串,以将设计添加到“MDTextFieldClear”。我不确定错误是否必须在 kv 字符串中,但是在对类和 kv 字符串的缩进进行了一些测试之后,我认为这可能是原因。 下面是一段代码:
from kivymd.theming import ThemeManager
from kivymd.textfields import MDTextFieldClear # KivyMD imports
class LayoutPy(FloatLayout): # Widget class
def __init__(self, **kwargs):
super(LayoutPy, self).__init__(**kwargs)
self.get_voc = MDTextFieldClear(helper_text="Please enter the translation", helper_text_mode="on_focus", max_text_length=12, multiline=False, color_mode="accent")
self.add_widget(self.get_voc)
# ... (few more widgets) ...#
Builder.load_string("""
#:import MDTextField kivymd.textfields.MDTextField
#:import MDTextFieldRound kivymd.textfields.MDTextFieldRound
#:import MDTextFieldClear kivymd.textfields.MDTextFieldClear
#:import MDTextFieldRect kivymd.textfields.MDTextFieldRect
<LayoutPy>:
orientation: 'vertical'
FloatLayout:
MDTextFieldClear:
hint_text: ""
helper_text: "Enter translation"
helper_text_mode: "on_focus"
max_text_length: 10
""")
class KivyGUI(App): # Main class for build
theme_cls = ThemeManager()
theme_cls.primary_palette = ("Blue")
title = ('Lingu Trainer')
main_widget = None
def build(self):
c = LayoutPy()
d = Factory.TextFields()
return c
if __name__ == "__main__":
KivyGUI().run()
错误如下:
Traceback(最近一次调用最后一次): 文件“PATH_TO_MY_PYTHON_FILE”,第 106 行,在 KivyGUI().run()
文件“C:\Users\username\Anaconda3\lib\site-packages\kivy\app.py”,第 800 行,运行中 root = self.build()
文件“PATH_TO_MY_PYTHON_FILE”,第 100 行,在构建中 c = LayoutPy()
init 中的文件“PATH_TO_MY_PYTHON_FILE”,第 54 行 self.get_voc = MDTextFieldClear(helper_text="请输入翻译", helper_text_mode="on_focus", max_text_length=12, multiline=False, color_mode="accent")
文件“C:\Users\username\Anaconda3\lib\site-packages\kivy\uix\boxlayout.py”,第 131 行,在 init super(BoxLayout, self).init(**kwargs)
文件“C:\Users\username\Anaconda3\lib\site-packages\kivy\uix\layout.py”,第 76 行,在 init super(Layout, self).init(**kwargs)
init 中的文件“C:\Users\username\Anaconda3\lib\site-packages\kivy\uix\widget.py”,第 340 行 super(Widget, self).init(**kwargs)
文件“kivy_event.pyx”,第 243 行,在 kivy._event.EventDispatcher.init TypeError: object.init() 没有参数
【问题讨论】:
-
是的,你应该指向错误来自的行和消息。到目前为止,我只能猜测这里的 super(LayoutPy, self).__init__(**kwargs) 这个 LayoutPy。 init 不需要任何参数
-
我现在添加了完整的错误信息
-
是的,正如我所说的 super(something, self).init(**kwargs) 调用 something.init(**kwargs) 但这个初始化不需要 args,可能是 super(Widget, self).init (**kwargs) 导致跟踪到此结束
-
请参阅 rhettinger.wordpress.com/2011/05/26/super-considered-super 以获取有关从
__init__正确使用super的建议。简而言之,像LayoutPy这样的类必须从kwargs中删除FloatLayout不会期望的任何参数,因为否则FloatLayout会盲目地将它们传递给object,这不会期望任何关键字参数。 -
你有适合我的代码示例的解决方案吗?
标签: python kivy kivy-language