Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kivy未将对象与规则匹配_Python_Kivy - Fatal编程技术网

Python Kivy未将对象与规则匹配

Python Kivy未将对象与规则匹配,python,kivy,Python,Kivy,我是Kivy的新手,我似乎不理解在KV文件中定义并引用规则的语法 例如,当我根据实际的小部件类名(在本例中为ScrollView小部件)定义规则时,代码正常工作: 在xxx.py中: 在xxx.kv中: 在xxx.kv中: 在xxx.kv中: 采样电压:1.kv #:kivy 1.9.0 <SampleLabel>: Label: id: label_in_sample_label # this will give you access to THIS l

我是Kivy的新手,我似乎不理解在KV文件中定义并引用规则的语法

例如,当我根据实际的小部件类名(在本例中为ScrollView小部件)定义规则时,代码正常工作:

在xxx.py中:

在xxx.kv中:

在xxx.kv中:

在xxx.kv中:

采样电压:1.kv

#:kivy 1.9.0

<SampleLabel>:
    Label:
        id: label_in_sample_label  # this will give you access to THIS label 
                                   # through python code     
        size_hint_y: None
        height: 40
#:kivy 1.9.0
:
尺寸提示:无
身高:40
:
标签:
尺寸提示:无
身高:40

kv规则适用于小部件类。Scroller不是一个小部件类,它不继承任何东西。也许你的意思是

from kivy.uix.widget import Widget  # or some other Widget class
class Scroller(Widget):
    ...
此外,我不鼓励为内置小部件创建类似
的规则-这将影响所有滚动视图,并可能产生奇怪的效果。相反,创建一个子类并为此创建一个规则

还有

class XxxApp():
    ...
    scroller = Scroller()

…这没有任何作用,scroller只是一个类级变量,它实际上不会对它做任何事情。

kv规则适用于小部件类。Scroller不是一个小部件类,它不继承任何东西。也许你的意思是

from kivy.uix.widget import Widget  # or some other Widget class
class Scroller(Widget):
    ...
此外,我不鼓励为内置小部件创建类似
的规则-这将影响所有滚动视图,并可能产生奇怪的效果。相反,创建一个子类并为此创建一个规则

还有

class XxxApp():
    ...
    scroller = Scroller()
…这没有任何作用,scroller只是一个类级变量,它实际上不会对它做任何事情。

尽量不要使用u“”,有时它会导致使用kivy和py2时出现wierd unicode解码错误。只要使用“”,你就会更快乐

您的可运行示例有一个错误

class SampleApp(App):
    def build(self):
        root = SampleLabel()  

        root.text = u'Sample Text'
        return root
当您这样做时:

    root.text = u'Sample Text' 
您正在对样本标签执行此操作。但是您的SampleLabel没有文本属性,因为它是小部件的实例,而不是Label的实例。 Kivy不会崩溃,因为它会自动创建属性。我的意思是,kivy不会像在标签上一样显示它

您可以这样做:

采样电压:1.kv

#:kivy 1.9.0

<SampleLabel>:
    Label:
        id: label_in_sample_label  # this will give you access to THIS label 
                                   # through python code     
        size_hint_y: None
        height: 40
通过这种方式,您可以定义复杂的小部件。但是如果你只是想要一个自定义标签,你不需要改变你的kivy代码。只需从标签而不是小部件继承SampleLabel:

class SampleLabel(Label):
    pass
我希望这能回答您的问题。

尽量不要使用u“”,有时使用kivy和py2会导致wierd unicode解码错误。只要使用“”,你就会更快乐

您的可运行示例有一个错误

class SampleApp(App):
    def build(self):
        root = SampleLabel()  

        root.text = u'Sample Text'
        return root
当您这样做时:

    root.text = u'Sample Text' 
您正在对样本标签执行此操作。但是您的SampleLabel没有文本属性,因为它是小部件的实例,而不是Label的实例。 Kivy不会崩溃,因为它会自动创建属性。我的意思是,kivy不会像在标签上一样显示它

您可以这样做:

采样电压:1.kv

#:kivy 1.9.0

<SampleLabel>:
    Label:
        id: label_in_sample_label  # this will give you access to THIS label 
                                   # through python code     
        size_hint_y: None
        height: 40
通过这种方式,您可以定义复杂的小部件。但是如果你只是想要一个自定义标签,你不需要改变你的kivy代码。只需从标签而不是小部件继承SampleLabel:

class SampleLabel(Label):
    pass

我希望这能回答你的问题。

是否应该
滚动查看:
真的在
定义中?嗨,Torxed。如果我不告诉Kivy,它怎么知道要创建什么样的小部件呢?请告诉我如何更正此定义以使其正常工作。是否应
ScrollView:
真的位于
定义中?嗨,Torxed。如果我不告诉Kivy,它怎么知道要创建什么样的小部件呢?请告诉我如何更正此定义,使其生效。嗨,恶劣。关于Scroller(小部件)与Scroller()的比较,您是对的。在我处理这个问题的实际代码中,我使用了Scroller(小部件),并编辑了我的原始问题,以显示Scroller是以这种方式定义的。继续:我不想因为您给出的原因而有规则。我的问题的全部要点是,我还没有弄清楚如何定义子类。这就是我想做的:使Scroller成为一个由ScrollView小部件组成的类。继续:关于“这什么都不做”,我想用“Scroller=Scroller()”,基于我所看到的每个示例,创建一个ScrollView小部件的实例,该小部件的属性在KV文件中为Scroller规则定义。请告诉我如何将Scroller定义为具有特定属性的ScrollView小部件,然后在Python代码中创建它的实例。这就是我要做的。你确实创建了一个实例,你没有对它做任何事情。如果你想让它成为你的根小部件,那么从你的应用程序类的build方法返回实例。我确实从构建方法返回了实例。请看一下我展示的两个版本,并与不起作用的版本进行比较。唯一的区别是,不起作用的一个尝试将Scroller定义为包含ScrollView。这是我唯一需要帮助的事情,如何在KV文件中指定Scroller包含一种特殊类型的小部件(在我的例子中是ScrollView),就像web上的许多示例一样。嗨,恶劣。关于Scroller(小部件)与Scroller()的比较,您是对的。在我处理这个问题的实际代码中,我使用了Scroller(小部件),并编辑了我的原始问题,以显示Scroller是以这种方式定义的。继续:我不想因为您给出的原因而有规则。我的问题的全部要点是,我还没有弄清楚如何定义子类。这就是我想做的:使Scroller成为一个由ScrollView小部件组成的类。继续:关于“这什么都不做”,我想用“Scroller=Scroller()”,基于我所看到的每个示例,创建一个ScrollView小部件的实例,该小部件的属性在KV文件中为Scroller规则定义。请告诉我如何将Scroller定义为具有特定属性的ScrollView小部件,然后在Python代码中创建它的实例。这就是我要做的。你确实创建了一个实例,你没有对它做任何事情。如果希望它成为根小部件,请从
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.widget import Widget


class SampleLabel(Widget):
    pass


class SampleApp(App):
    def build(self):
        root = SampleLabel() 

        # Now you can set a text to it :D    
        root.ids.label_in_sample_label.text = u'Sample Text'
        return root


if __name__ == '__main__':
    SampleApp().run()
class SampleLabel(Label):
    pass